gpt4 book ai didi

java - 将变量字段作为字符串进行 json 序列化

转载 作者:行者123 更新时间:2023-12-02 09:28:05 25 4
gpt4 key购买 nike

我有一个 pojo,正在对其进行 REST 响应解码。其中一个字段(“变量值”)只是一个 Json 变量元素(可以是任何形式)。有没有办法告诉它在所有情况下将字段视为纯字符串,而不是尝试反序列化为对象?

这是一个 json 对象(“变量值”可以是任何形式):

{"id":1, "variable value": {"name":"one", "age": 22, "data":{"key":"value"}}}

我想使用 gson 将此 json 保存为类对象

public class SomeCommand {
private Long id;
private String data;
}

最佳答案

听起来您想解析给定的 JSON 字符串以将变量值转换为String对象。您可以通过创建 2 个类来实现此目的 - SomeCommandOriginalSomeCommand,如下所示:

首先,将 JSON 字符串转换为 SomeCommandOriginal,以将变量值的值映射到 JsonNode

class SomeCommandOriginal {
private Long id;
@JsonProperty("variable value")
private JsonNode variableValue;

//general getters and setters
}

class SomeCommand {
private Long id;
private String data;

public SomeCommand(SomeCommandOriginal someCommandOriginal) {
super();
this.id = someCommandOriginal.id;
this.data = someCommandOriginal.variableValue.toString();
}

//general getters and setters
}

其次,初始化 SomeCommand 的实例,并将 someCommandOriginal 作为自定义构造函数的参数传递:

ObjectMapper mapper = new ObjectMapper();
SomeCommandOriginal someCommandOriginal = mapper.readValue(jsonStr, SomeCommandOriginal.class);
SomeCommand someCommand = new SomeCommand(someCommandOriginal);
System.out.println(someCommand.getData());

控制台输出:

{"name":"one", "age": 22, "data":{"key":"value"}}

已更新

如果您使用的是Gson,只需将variableValue的数据类型修改为JsonObject,并切换为@SerializedName注解即可,如下:

class SomeCommandOriginal {
private Long id;
@SerializedName("variable value")
private JsonObject variableValue;

//general getters and setters
}

然后你也可以获得相同的结果:

Gson gson = new Gson();
SomeCommandOriginal someCommandOriginal = gson.fromJson(jsonStr, SomeCommandOriginal.class);
SomeCommand someCommand = new SomeCommand(someCommandOriginal);
System.out.println(someCommand.getData());

关于java - 将变量字段作为字符串进行 json 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58191420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com