我试着做一些这样的事情,但它不起作用:
Map<String, String> propertyMap = new HashMap<String, String>();
propertyMap = JacksonUtils.fromJSON(properties, Map.class);
但是IDE说:
未检查映射到映射<字符串,字符串>
正确的做法是什么?
我只使用杰克逊,因为这是什么已经在项目中,有一个本地Java的方式转换到/从JSON?
在PHP中,我将简单地json_decode($str),我将返回一个数组。我在这里也需要同样的东西。
以下是我的工作:
Map<String, String> propertyMap = getJsonAsMap(json);
其中getJsonAsMap的定义如下:
public HashMap<String, String> getJsonAsMap(String json)
{
try
{
ObjectMapper mapper = new ObjectMapper();
TypeReference<Map<String,String>> typeRef = new TypeReference<Map<String,String>>() {};
HashMap<String, String> result = mapper.readValue(json, typeRef);
return result;
}
catch (Exception e)
{
throw new RuntimeException("Couldnt parse json:" + json, e);
}
}
注意,如果你的json中有子对象(因为它们不是String,它们是另一个HashMap),这将失败,但如果你的json是一个属性的键值列表,就会工作:
{
"client_id": "my super id",
"exp": 1481918304,
"iat": "1450382274",
"url": "http://www.example.com"
}
你得到的警告是由编译器完成的,而不是由库(或实用程序方法)。
直接使用Jackson的最简单方法是:
HashMap<String,Object> props;
// src is a File, InputStream, String or such
props = new ObjectMapper().readValue(src, new TypeReference<HashMap<String,Object>>() {});
// or:
props = (HashMap<String,Object>) new ObjectMapper().readValue(src, HashMap.class);
// or even just:
@SuppressWarnings("unchecked") // suppresses typed/untype mismatch warnings, which is harmless
props = new ObjectMapper().readValue(src, HashMap.class);
你调用的实用工具方法可能会做类似的事情。