2017-08-04 755 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我用一個例子更新了我的答案 –