我有这种格式的json:
{
"success": 1,
"value": "[\"1-1\",\"1-2\",\"1-3\"]"
}
成功实际上位于int
,价值是List
String
,我希望得到值,将这些元素放入List<String>
。字符串列表将是:
1-1
1-2
1-3
我实际上希望使用JsonNode解析整个json,但限制我这样做的问题是:
"[\"1-1\",\"1-2\",\"1-3\"]"
包含双引号,所以它
可能被视为String。以下是我尝试的解决方法,是否有任何优雅/更好(没有正则表达式,只需将整个json解析为JsonNode)这样做的方法吗?
ObjectMapper mapper= new ObjectMapper();
JsonNode response = mapper.readTree(payload); //payload is the json string
JsonNode success = response.get("success");
JsonNode value = response.get("value");
if (success.asBoolean()) {
String value = value .toString();
value = value .replaceAll("\"", "").replaceAll("\\[", "").replaceAll("\\]", "")
.replace("\\", "");
return Arrays.asList(value .split(","));
}
答案 0 :(得分:1)
必须摆脱字符串
中的反斜杠
不,你真的不喜欢。
因此可以将其视为字符串。
实际上,并且您查看它作为字符串的事实是转义字符存在的原因。
如果将response.get("value").toString()
传递给ObjectMapper解析器,则应该返回一个数组或列表
How to use Jackson to deserialise an array of objects
List<String> values = MAPPER.readValue("[\"hello\", \"world\"]", new TypeReference<List<String>>(){});
System.out.println(values); // [hello, world]
另一种更优选的解决方案是修复初始JSON的生产者。