2016-06-22 14 views
5

Próbuję przekonwertować HashSet<String> na JSONObject, a następnie przeanalizować wynikowy kod JSON.Nie można zanalizować komponentu HashSet do łańcucha JSONObject

Oto co próbowałem:

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

Ale to daje mi to wyjście i błąd:

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

Tutaj można zobaczyć zarówno aib są łańcuchami, na liście zarówno są w podwójnych cudzysłowach, ale w zestawie nie.

Używam org.json.simple v1.1.

+0

Czy próbować dokonać HashSet jako HashSet ? Myślę, że to nie rozwiąże problemu, ale warto go przetestować. –

+0

Próbowałem używać HashSet , ale dane wyjściowe są takie same –

+1

Po zmianie pakietu na 'org.json.JSONObject', ten sam kod działa. Nie jestem pewien, czy może to być błąd w org.json.simple. – Ravikumar

Odpowiedz

1

myślę, że to jest problem z org.json.simple bibliotece.

Użyłem org.json biblioteki i trzeba zrobić kilka drobnych zmian w powyższym kodzie pracować:

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

wyjściu tego kodu jest:

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

po przekonwertowaniu tablicy łańcuchów na listę, a następnie na liście na zestaw, nie jest już ciągiem, ale tablicą obiektów, stąd nowy HashSet <> (Arrays.asList ("a", "b"))); daje "zestaw": [b, a] (bez cudzysłowów). I parser.parse (jsonString); działa na Object nie tablica obiektów.

Spróbuj użyć listę zamiast zestawu jak poniżej:

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

wiem, że jeśli Konwertuję zestaw do listy, to zadziała. ale chciałem przekonwertować HashSet do JSON bezpośrednio –

+0

@Ashraful Islam, konwersja Hashset, która jest zbiorem json spowoduje błąd z json prostej metody parsowania. Używanie obiektu takiego jak List spowoduje zawarcie umowy. – mattymanme

Powiązane problemy