JsonNode将JSON转换为字符串列表

时间:2017-08-04 02:35:36

标签: java json

我有这种格式的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\",\"1-2\",\"1-3\"]"包含双引号,所以它 可能被视为String。
  2. 必须摆脱字符串中的反斜杠
  3. 以下是我尝试的解决方法,是否有任何优雅/更好(没有正则表达式,只需将整个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(","));
        }
    

1 个答案:

答案 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的生产者。

相关问题