我需要将JSON解析的映射传递给具有以下签名的方法:
QUEUE.sendMsg(Map<String, String> data);
不幸的是,我无法控制上述方法,杰克逊在Map<String, Object>
给了我解析的JSON。
我需要Map<String, String>
其中
例如,如果JSON输入是
{
"name" = "John",
"marked" = false,
"age" = 30,
"tags" = [ "work", "personal" ],
"meta" = { "k1" : "v1", "k2" : "v2" },
}
我想要一个Map<String, String>
map.get("name") returns "John",
map.get("marked") returns "false",
map.get("age") returns "30",
map.get("tags") returns "[ \"work\", \"personal\" ]",
map.get("meta") returns "{ \"k1\" : \"v1\", \"k2\" : \"v2\" }"
有没有办法实现这个目标?
不幸的是,我几乎不熟悉Java,并且没有Jackson的先验知识(我必须使用Jackson来解决这个问题)。
谢谢。
答案 0 :(得分:1)
是的,只要您确保传递完整类型信息,隐式转换就应该有效。如下所示:
Map<String,String> map = mapper.readValue(jsonSource, new TypeReference<Map<String,String>>() { });
答案 1 :(得分:0)
这样的事情应该有用......
final Map<String, Object> input = ...;
final Map<String, String> output = new Map<>(input.size());
final StringWriter writer = new StringWriter();
final StringBuffer buf = writer.getBuffer();
for (final Map.Entry<String, Object> entry : input.entrySet()) {
try (final JsonGenerator gen = JsonFactory.createJsonGenerator(writer)) {
gen.writeObject(entry.getValue());
}
output.put(entry.getKey(), buf.toString());
buf.setLength(0);
}
答案 2 :(得分:0)
我认为您正在寻找keyAs
。有关详细信息,请查看Jackson Documentation