2017-08-04 115 views
-1

的名单上有以下格式的JSON:JsonNode转换JSON字符串

{ 
    "success": 1, 
    "value": "[\"1-1\",\"1-2\",\"1-3\"]" 
} 

成功实际上是int和值是String一个List,我希望得到和把这些元素放入List<String>。串的名单将是:

1-1 
1-2 
1-3 

我其实是想解析使用JsonNode整个JSON,但限制了我这样做的问题是:

  1. "[\"1-1\",\"1-2\",\"1-3\"]"是包裹着双引号,所以它 可能被视为字符串。
  2. 有串

下在摆脱反斜杠的是我的解决方法,我试过了,没有任何高雅/更好(这是一个没有正则表达式更好,只是解析整个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

有串

没有在摆脱反斜杠,你真的不知道。

因此它可能被视为字符串。

它实际上是和事实,你是观看它作为一个字符串就是为什么转义字符存在的理由。

如果传递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。

+0

嗨,谢谢你的帮助,是你发布的样本能否解决领先和尾随的双引号问题?因为我试过了,似乎无法从json解析到'List '。 '不能从[Source:“[\”1-1 \“,\”1-2 \“,\”1-3 \“]”;';' – hades

+0

'VALUE_STRING标记 中反序列化java.util.ArrayList实例'mapper.readValue'应该接受一个JSON字符串,就像'payload'变量一样。也许它只是'mapper.readTree(response.get(“value”)。toString());'没有TypeReference,但这会给一个JsonNode,而不是一个列表

+0

@hades我用一个例子更新了我的答案 –