对于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());
}
答案 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>>(){});