2017-08-04 19 views
-1

のリストにJSONを変換しますJsonNodeが、私はこの形式のJSON持つ文字列

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

成功intに実際にあると値がStringListですが、私は値を取得したいとそれらの要素をList<String>に入れてください。文字列のリストは次のようになります。

1-1 
1-2 
1-3 

は、私が実際にJsonNodeを使用して全体のJSONを解析したいが、そうすることから私を制限する問題は、次のとおりです。

  1. "[\"1-1\",\"1-2\",\"1-3\"]"はそう、二重引用符でラップされ はStringとして扱われるかもしれません。
  2. 以下は、私が試した私の回避策ですへの(それは正規表現のない方が良い、ちょうどJsonNodeに全体JSONをパース)より良い/エレガントな方法があり、文字列にバックスラッシュを取り除くために

を持っていますそうする?

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

文字列

にバックスラッシュを取り除くために持っていいえ、あなたが本当にしないでください。

だから、文字列として扱われるかもしれません。それは実際には、あなたがが、それを文字列として表示されているという事実は、エスケープ文字が存在する理由です

あなたはObjectMapperパーサーにresponse.get("value").toString()を渡す場合は、配列またはリスト

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 'まで解析できないようです。 'VALUE_STRINGトークンからjava.util.ArrayListのインスタンスを逆シリアル化できません [ソース:" [\ "1-1 \"、\ "1-2 \"、\ "1-3 \"]」; " – hades

+0

'mapper.readValue'はあなたの' payload'変数のようにJSON文字列を受け入れます。おそらくそれは単にTypeReferenceを持たないmapper.readTree(response.get( "value")。toString()); 'ですが、リストではなくJsonNodeを返します。

+0

@hades –

関連する問題