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

等待:

我有一个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以将变量value的值映射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());

控制台输出:

{“名称”:“一个”,“年龄”:22,“数据”:{“键”:“值”}}

更新

如果使用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());

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章