我有JSON对象,我不想解析一些嵌套对象。相反,我希望他们作为字符串(我有我的理由)。有一个简单的方法吗? 我试图实现自定义反序列化器,但我发现它以不同的方式复杂化(我不想连接令牌,我只需要整个对象。它也没有考虑':&# 39;作为标记因此需要特殊处理)或者我可能缺少smth。 在json中添加引号也不是一种选择。我需要json的方式。
JSON示例:
{
"lastName":"Bitman",
"jsonObjectIDontWantToParse":{
"somefield":1234
}
}
Java对象我想将json解析为。
public class Jack {
public String lastName;
public String jsonObjectIDontWantToParse;
@Override
public String toString() {
return "lastName=" + lastName + ", jsonObjectIDontWantToParse=" + jsonObjectIDontWantToParse;
}
}
这是我的主要课程
public static void main(String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper();
final String jackString = "{\"lastName\":\"Bitman\",\"jsonObjectIDontWantToParse\":{\"somefield\":1234}}";
Jack user = mapper.readValue(jackString, Jack.class);
System.out.println(user);
}
我希望输出像这样
lastName=Bitman, jsonObjectIDontWantToParse={"somefield":1234}
更新:所以基本上这是我正在寻找的例子(除了没有这样的方法)。我想跳过对该节点的任何解析......
public class LeaveAsStringDeserializer extends JsonDeserializer<String> {
@Override
public String deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
return jp.getWholeObject().toString();
}
}
答案 0 :(得分:1)
我认为您应该使用JsonNode
类作为jsonObjectIDontWantToParse
属性的类型:
class Jack {
private String lastName;
private JsonNode jsonObjectIDontWantToParse;
// getters, setters, toString, other
public String getJsonObjectIDontWantToParseAsString() {
return jsonObjectIDontWantToParse.toString();
}
}
如果您想获得getJsonObjectIDontWantToParseAsString
代表,可以添加一个额外的方法String
。
使用示例:
ObjectMapper mapper = new ObjectMapper();
Jack jack = mapper.readValue(json, Jack.class);
System.out.println(jack);
System.out.println(jack.getJsonObjectIDontWantToParseAsString());
以上程序打印:
lastName=Bitman, jsonObjectIDontWantToParse={"somefield":1234}
{"somefield":1234}
答案 1 :(得分:-1)
要做到这一点:
lastName=Bitman, jsonObjectIDontWantToParse={"somefield":1234}
您只需要转义jsonObjectIDontWantToParse
的字符串表示形式。这意味着改变它:
jsonObjectIDontWantToParse: "{ \"somefield\": 1234 }"