将JSON嵌套对象解析为String

时间:2014-04-15 16:00:36

标签: java json jackson

我有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();
    }
}

2 个答案:

答案 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 }"
相关问题