2016-06-22 6 views
5

HashSet<String>JSONObjectに変換し、出力JSONを解析しようとしています。HashSetをJSONObject文字列に解析できません

JSONObject json = new JSONObject(); 
json.put("set", new HashSet<>(Arrays.asList("a", "b"))); 
json.put("list", Arrays.asList("a", "b")); 
String jsonString = json.toJSONString(); 

System.out.println(jsonString); 

JSONParser parser = new JSONParser(); 
JSONObject afterParse = (JSONObject) parser.parse(jsonString); 
System.out.println(afterParse.toJSONString()); 

しかし、それは私に、この出力とエラーを与えている:ここで

は、私が試したものである

ここ
{"set":[b, a],"list":["a","b"]} 
Exception in thread "main" Unexpected character (b) at position 8. 

、あなたはAとBの両方が両方のリストには、文字列で見ることができます二重引用符で囲まれていますが、セット内にはありません。

私はorg.json.simple v1.1を使用しています。

+0

てみましたHashSetとして?私はそれが問題を解決しないと思うが、それはテストされる価値がある。 –

+0

私はHashSet を使用しようとしましたが、出力は同じです –

+1

パッケージを 'org.json.JSONObject'に変更したとき、同じコードが動作します。 org.json.simpleのバグかもしれません。 – Ravikumar

答えて

1

:以下のように

ではなく、セットのリストを使用してみてください。

私はorg.jsonライブラリを使用し、動作するように上記のコードでは、いくつかのマイナーな変更を行う必要がありいます

JSONObject json = new JSONObject(); 
json.put("set", new HashSet<>(Arrays.asList("a", "b"))); 
json.put("list", Arrays.asList("a", "b")); 
String jsonString = json.toString(); 

System.out.println(jsonString); 

JSONObject afterParse = new JSONObject(jsonString); 
System.out.println(afterParse.toString()); 

このコードの出力は次のとおりです。あなたはHashSetのを作るために

{"set":["a","b"],"list":["a","b"]} 
1

文字列の配列をリストに変換してからセットに変換するとき、それはもはや文字列ではなくオブジェクトの配列であるため、新しいHashSet <>(Arrays.asList( "a"、 "b")) )); [セット]を与える:[b、a](引用符なし)。そして、parser.parse(jsonString);オブジェクトの配列ではないオブジェクト上で動作します。私はこれがorg.json.simpleライブラリに問題があると思い

json.put("set", new Arraylist<>(new HashSet<>(Arrays.asList("a", "b")))); 
+0

私は知っている場合は、その私はそれが動作するリストに変換セット。しかし、私はHashSetを直接JSONに変換したかった –

+0

@Ashraful Islam、jsonへのコレクションであるHashsetをjsonの単純な解析メソッドでエラーに変換する。リストのようなオブジェクトを使用すると、取引が行われます。 – mattymanme

関連する問題