Das Lustige ist, dass org.JSONArrayeine ArrayList unter der Haube verwendet wird ... The arrayList where the JSONArray's properties are kept, so dass die meisten Schleifen in vielen Fällen umsonst durchgeführt werden (nur für die Kapselung)
Christophe Roussy
Antworten:
186
ArrayList<String> list =newArrayList<String>();JSONArray jsonArray =(JSONArray)jsonObject;if(jsonArray !=null){int len = jsonArray.length();for(int i=0;i<len;i++){
list.add(jsonArray.get(i).toString());}}
In der for-Schleife fehlt die schließende Klammer ... es wurde versucht, sie zu bearbeiten, aber es sind nicht genügend Zeichen vorhanden, um die Genehmigung zu bestehen. Naja! nur zu Ihrer Information.
Matt K
Da es nicht wirklich fehlt, hat der Antwortende nur einen Teil des Codes mit den offenen und schließenden Klammern der Funktion eingefügt.
Sarim Javaid Khan
1
Was passiert, wenn jsonArray.get(i)null zurückgegeben wird (als Ergebnis der Analyse von :) [ "String 1", null, "String 2" ]? Würde Ihre For-Loop dann nicht abstürzen?
DBM
Vielen Dank. Wenn Sie einen Ring haben, kann JSONArray als JSONArray erstellt werden. JsonArray = new JSONArray (yourString); Der Rest des Codes bleibt gleich.
Kaushik Lele
Abhängig von der Implementierung, die Sie möglicherweise size()anstelle von benötigen length().
Guillaume F.
56
Wenn Sie noch kein JSONArray-Objekt haben, rufen Sie auf
Führen Sie dann einfach eine Schleife durch und erstellen Sie Ihr eigenes Array. Bei diesem Code wird davon ausgegangen, dass es sich um ein Array von Zeichenfolgen handelt. Es sollte nicht schwierig sein, diese an Ihre spezielle Array-Struktur anzupassen.
List<String> list =newArrayList<String>();for(int i=0; i<jsonArray.length(); i++){
list.add( jsonArray.getString(i));}
Ich weiß, dass es sich bei dieser Frage um JSONArray handelt, aber das folgende Beispiel hat sich als nützlich erwiesen, wenn Sie JSONArray nicht zum Extrahieren von Objekten aus JSONObject verwenden müssen.
import org.json.simple.JSONObject;import org.json.simple.JSONValue;String jsonStr ="{\"types\":[1, 2]}";JSONObject json =(JSONObject)JSONValue.parse(jsonStr);List<Long> list =(List<Long>) json.get("types");if(list !=null){for(Long s : list){System.out.println(s);}}
Funktioniert auch mit einer Reihe von Zeichenfolgen
wir beginnen mit der Konvertierung [JSONArray -> List <JSONObject>]
publicstaticList<JSONObject> getJSONObjectListFromJSONArray(JSONArray array)throwsJSONException{ArrayList<JSONObject> jsonObjects =newArrayList<>();for(int i =0;
i <(array !=null? array.length():0);
jsonObjects.add(array.getJSONObject(i++)));return jsonObjects;}
Als nächstes erstellen Sie eine generische Version, die array.getJSONObject (i ++) durch POJO ersetzt
Beispiel:
public<T>staticList<T> getJSONObjectListFromJSONArray(Class<T> forClass,JSONArray array)throwsJSONException{ArrayList<Tt> tObjects =newArrayList<>();for(int i =0;
i <(array !=null? array.length():0);
tObjects.add((T) createT(forClass, array.getJSONObject(i++))));return tObjects;}privatestatic T createT(Class<T> forCLass,JSONObject jObject){// instantiate via reflection / use constructor or whatsoever
T tObject = forClass.newInstance();// if not using constuctor args fill up // // return new pojo filled object return tObject;}
Wir können den JSON einfach in einen lesbaren String konvertieren und ihn mit der "split" -Methode der String-Klasse teilen.
String jsonAsString = yourJsonArray.toString();//we need to remove the leading and the ending quotes and square brackets
jsonAsString = jsonAsString.substring(2, jsonAsString.length()-2);//split wherever the String contains ","String[] jsonAsStringArray = jsonAsString.split("\",\"");
Ich sehe keine toArray()Methode in den JSONArray()Dokumenten. json.org/javadoc/org/json/JSONArray.html Diese Frage wäre wahrscheinlich nicht gestellt worden, wenn es eine einfache gegeben hätte toArray().
Javajavajavajavajava
1
net.sf.json.JSONArray verfügt über die toArray () -Methode, sodass diese Antwort für diese JSON-Bibliothek funktioniert. In der Frage wurde die verwendete Bibliothek nicht angegeben.
org.JSONArray
eine ArrayList unter der Haube verwendet wird ...The arrayList where the JSONArray's properties are kept
, so dass die meisten Schleifen in vielen Fällen umsonst durchgeführt werden (nur für die Kapselung)Antworten:
quelle
jsonArray.get(i)
null zurückgegeben wird (als Ergebnis der Analyse von :)[ "String 1", null, "String 2" ]
? Würde Ihre For-Loop dann nicht abstürzen?size()
anstelle von benötigenlength()
.Wenn Sie noch kein JSONArray-Objekt haben, rufen Sie auf
Führen Sie dann einfach eine Schleife durch und erstellen Sie Ihr eigenes Array. Bei diesem Code wird davon ausgegangen, dass es sich um ein Array von Zeichenfolgen handelt. Es sollte nicht schwierig sein, diese an Ihre spezielle Array-Struktur anzupassen.
quelle
Verwenden Sie statt der gebündelten
org.json
Bibliothek Jackson oder GSON, bei denen es sich um einen Einzeiler handelt. Mit Jackson, z.quelle
Vielleicht ist es nur eine Problemumgehung (nicht sehr effizient), aber Sie könnten so etwas tun:
String[] resultingArray = yourJSONarray.join(",").split(",");
Natürlich können Sie das
,
Trennzeichen nach Belieben ändern (ich hatte eineJSONArray
E-Mail-Adresse).quelle
Verwendung kann ein
String[]
anstelle eines verwendenArrayList<String>
:Dadurch wird der Speicheraufwand für eine ArrayList reduziert
Ich hoffe es hilft!
quelle
Mit Java Streams können Sie einfach eine
IntStream
Zuordnung der Objekte verwenden:quelle
Ich weiß, dass es sich bei dieser Frage um JSONArray handelt, aber das folgende Beispiel hat sich als nützlich erwiesen, wenn Sie JSONArray nicht zum Extrahieren von Objekten aus JSONObject verwenden müssen.
Funktioniert auch mit einer Reihe von Zeichenfolgen
quelle
Hier ist eine bessere Möglichkeit: Wenn Sie die Daten von der API erhalten. PARSE dann den JSON und lade ihn in deine Listenansicht:
quelle
wir beginnen mit der Konvertierung [JSONArray -> List <JSONObject>]
Als nächstes erstellen Sie eine generische Version, die array.getJSONObject (i ++) durch POJO ersetzt
Beispiel:
quelle
Sie können ein
String[]
anstelle eines verwendenArrayList<String>
:Ich hoffe es hilft!
quelle
quelle
Wir können den JSON einfach in einen lesbaren String konvertieren und ihn mit der "split" -Methode der String-Klasse teilen.
quelle
Ich weiß, dass die Frage für war
Java
. Aber ich möchte eine mögliche Lösung für teilen,Kotlin
weil ich denke, dass es nützlich ist.Mit Kotlin können Sie eine Erweiterungsfunktion schreiben, die a
JSONArray
in ein natives (Kotlin) Array konvertiert :Jetzt können Sie
asArray()
eineJSONArray
Instanz direkt aufrufen .quelle
Wie wäre es mit java.util.Arrays?
quelle
toArray()
Methode in denJSONArray()
Dokumenten. json.org/javadoc/org/json/JSONArray.html Diese Frage wäre wahrscheinlich nicht gestellt worden, wenn es eine einfache gegeben hättetoArray()
.