json 将变量字段序列化为字符串

json serialization with a variable field as a string

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

这是一个 json 对象("variable value" 可以是任何形式):

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

我想使用 gson

将此 json 保存为 class 对象
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());