繁体   English   中英

将JSON嵌套对象解析为String

[英]Parsing JSON nested object as String

我有JSON对象,并且我不想解析一些嵌套的对象。 相反,我希望它们作为String(我有我的理由)。 有一个简单的方法吗? 我尝试实现自定义反序列化器,但发现它以不同的方式变得复杂(我不想连接令牌,我只需要整个对象。它也不考虑将“:”作为令牌,因此需要特殊处理)或我错过了。 也不能在json中加上引号。 我需要这样的json。

JSON示例:

{
   "lastName":"Bitman",
   "jsonObjectIDontWantToParse":{
      "somefield":1234
   }
}

我想解析json的Java对象。

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

我认为,您应该将JsonNode类用作jsonObjectIDontWantToParse属性的类型:

class Jack {

    private String lastName;
    private JsonNode jsonObjectIDontWantToParse;

    // getters, setters, toString, other

    public String getJsonObjectIDontWantToParseAsString() {
        return jsonObjectIDontWantToParse.toString();
    }
}

如果要获取String表示getJsonObjectIDontWantToParseAsString则可以添加一个附加方法getJsonObjectIDontWantToParseAsString

用法示例:

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}

要做到这一点:

lastName=Bitman, jsonObjectIDontWantToParse={"somefield":1234}

您只需要转义jsonObjectIDontWantToParse的String表示jsonObjectIDontWantToParse 这意味着将其更改为:

jsonObjectIDontWantToParse: "{ \"somefield\": 1234 }"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM