2016-06-22 36 views
5

analysieren Ich versuche, HashSet<String> in JSONObject zu konvertieren und dann den Ausgabe-JSON zu analysieren. HierKann HashSet nicht zu JSONObject String

ist, was ich versucht habe:

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()); 

Aber es gibt mir diese Ausgabe und Fehler:

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

Hier legen Sie a und b sehen Strings sind, in der Liste sowohl sind in doppelten Anführungszeichen, aber im Set ist es nicht.

Ich verwende org.json.simple v1.1.

+0

Haben Sie versucht, Ihre HashSet zu machen als HashSet ? Ich denke, es wird das Problem nicht lösen, aber es lohnt sich, getestet zu werden. –

+0

Ich habe versucht, HashSet , aber die Ausgabe ist die gleiche –

+1

Wenn ich das Paket zu 'org.json.JSONObject' geändert, funktioniert der gleiche Code. Nicht sicher, dass es sich um einen Fehler in org.json.simple handelt. – Ravikumar

Antwort

1

Ich denke, das ist ein Problem, mit org.json.simple Bibliothek.

Ich habe org.json Bibliothek verwendet, und haben einige kleinere Änderungen in obigen Code zu tun, um zu arbeiten:

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()); 

Der Ausgang dieses Codes ist:

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

Wenn Sie ein Array von Strings in eine Liste und dann die Liste in ein Set konvertieren, ist es nicht mehr String, sondern ein Array von Objekten, daher neues HashSet <> (Arrays.asList ("a", "b"))); gibt "set": [b, a] (ohne Anführungszeichen). Und parser.parse (jsonString); arbeitet an Objekt nicht Array von Objekten.

Versuchen Sie, wie unten eine Liste statt einen Satz mit:

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

ich weiß, dass wenn Ich konvertiere Set zu Liste es wird funktionieren. aber ich wollte HashSet zu JSON direkt konvertieren –

+0

@Ashraful Islam, Umwandlung Hashset, das eine Sammlung zu Json ist, wird Fehler mit JSON einfache Parse-Methode geben. Die Verwendung eines Objekts wie List wird den Deal machen. – mattymanme