使用jackson

时间:2016-12-27 08:35:43

标签: java json jackson

我在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)

请让我知道我哪里出错了,我该如何解决这个问题。

2 个答案:

答案 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");