将包含数组的json字符串转换为Java中的Map

时间:2019-01-27 23:01:52

标签: java arrays json jackson

对于Java中的以下json字符串,我需要将String转换为Map: 请注意,这个json字符串中包含数组,这就是我面临的问题:

{
   "type":"auth",
   "amount":"16846",
   "level3":{
      "amount":"0.00",
      "zip":"37209",
      "items":[
         {
            "description":"temp1",
            "commodity_code":"1",
            "product_code":"11"
         },
         {
            "description":"temp2",
            "commodity_code":"2",
            "product_code":"22"
         }
      ]
   }
}

我尝试了以下链接中提到的几种方法:

Convert JSON string to Map – Jackson

Parse the JSONObject and create HashMap

我得到的错误:

  

JSON解析器错误:无法反序列化java.lang.String的实例   超出了START_OBJECT令牌...};行:3,列:20](通过   参考链:   java.util.LinkedHashMap [“ level3”])com.fasterxml.jackson.databind.JsonMappingException:   无法从START_OBJECT中反序列化java.lang.String实例   令牌

因此,要提供有关我使用Map的详细信息,将使用以下方法将此地图转换回json字符串:

    public static String getJSON(Object map) throws IOException {
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

    ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
    OutputStream stream = new BufferedOutputStream(byteStream);
    JsonGenerator jsonGenerator = objectMapper.getFactory().createGenerator(stream, JsonEncoding.UTF8);
    objectMapper.writeValue(jsonGenerator, map);
    stream.flush();
    jsonGenerator.close();
    return new String(byteStream.toByteArray());
}

1 个答案:

答案 0 :(得分:2)

您无法将JSON内容解析为Map<String, String> (就像在您发布的两个链接中一样)。 但是您可以将其解析为Map<String, Object>

例如这样的例子:

ObjectMapper mapper = new ObjectMapper();
File file = new File("example.json");
Map<String, Object> map;
map = mapper.readValue(file, new TypeReference<Map<String, Object>>(){});