我在json文件中有以下数据。
{
"product":"Data",
"data":{
"zip":[
{
"codeValue":"12345",
"distance":[
{
"5":"a c"
},
{
"2":"z c"
}
]
},
{
"codeValue":"60089",
"distance":[
{
"5":"a c"
},
{
"2":"z c"
}
]
}
]
}
}
我正在尝试使用以下代码打印zip
尺寸。
public void getJsonResponse() throws Exception {
String text = getTheData();
System.out.println(text);
ObjectMapper objMap = new ObjectMapper();
Map<String, Object> map = objMap.readValue(text, new TypeReference<Map<String, Object>>() {
});
String mainMap = map.get("product").toString();
String getData = map.get("data").toString();
Map<String, Object> map1 = objMap.readValue(getData, new TypeReference<Map<String, Object>>() {
});
List zip = (List) map1.get("zip");
System.out.println(zip.size());
}
此处代替sysout
zip.size()
,如果我使用mainMap
,我会将输出视为数据,但是当我使用zip.size()
时,我得到一些例外
线程“main”中的异常com.fasterxml.jackson.core.JsonParseException:意外字符('z'(代码122)):期望双引号启动字段名称 在[来源:java.io.StringReader@60f82f98; line:1,column:3] 在com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1524) at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:557) 在com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:475) at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._handleOddName(ReaderBasedJsonParser.java:1293) 在com.fasterxml.jackson.core.json.ReaderBasedJsonParser._parseName(ReaderBasedJsonParser.java:1190) at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:612) 在com.fasterxml.jackson.databind.deser.std.MapDeserializer._readAndBindStringMap(MapDeserializer.java:412) 在com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:312) 在com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:26) at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2993) at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2105) at onlyJava.JsonDataCAll.getJsonResponse(JsonDataCAll.java:24) at onlyJava.Test.main(Test.java:13)
请让我知道我哪里出错了,我该如何解决这个问题。
答案 0 :(得分:1)
您进行了可以跳过的转化。试试这个:
Map data = (Map) map.get("data");
List zip = (List) data.get("zip");
System.out.println(zip.size());
答案 1 :(得分:1)
String getData = map.get("data").toString();
这不会向您返回JSON,因此也是异常。你会得到类似{zip = [{...
)的东西而是从
更改您的陈述Map<String, Object> map1 = objMap.readValue(getData, new TypeReference<Map<String, Object>>() {
});
到
Map<String, Object> map1 = (Map<String, Object>) map.get("data");