Lo curioso es que org.JSONArrayusa una ArrayList debajo del capó ... The arrayList where the JSONArray's properties are kept, por lo que la mayoría de los bucles se hacen por nada en muchos casos (solo por la encapsulación)
Christophe Roussy
Respuestas:
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());}}
para el bucle falta el paréntesis de cierre ... intenté editarlo pero no hay suficientes caracteres para aprobar. ¡Oh bien! solo un FYI.
Matt K
En realidad no falta, el respondedor simplemente pegó un trozo de código con las llaves de apertura y cierre de la función.
Sarim Javaid Khan
1
¿Qué sucede si jsonArray.get(i)devuelve nulo (como resultado de analizar esto [ "String 1", null, "String 2" ])? ¿No se estrellaría entonces tu bucle for?
dbm
Gracias. Si uno tiene sring, JSONArray se puede crear como JSONArray jsonArray = new JSONArray (yourString); El resto del código seguirá siendo el mismo.
Kaushik Lele
Dependiendo de la implementación que pueda necesitar en size()lugar de length().
Luego simplemente recorra eso, construyendo su propia matriz. Este código asume que es una matriz de cadenas, no debería ser difícil de modificar para adaptarse a su estructura de matriz particular.
List<String> list =newArrayList<String>();for(int i=0; i<jsonArray.length(); i++){
list.add( jsonArray.getString(i));}
Tenga en cuenta que debe estar absolutamente seguro de que los datos no contienen su separador de caracteres, de lo contrario, terminará con datos corruptos.
Artemix
1
y el resultado tiene que ser una cadena.
Nicolas Tyler
Un forro, perfecto.
zeeshan
4
Use puede usar un en String[]lugar de un ArrayList<String>:
Reducirá la sobrecarga de memoria que tiene una ArrayList
¡Espero eso ayude!
String[] stringsArray =newString[jsonArray.length()];for(int i =0; i < jsonArray.length; i++){
parametersArray[i]= parametersJSONArray.getString(i);}
Sé que esa pregunta es sobre JSONArray, pero aquí hay un ejemplo que he encontrado útil cuando no necesita usar JSONArray para extraer objetos de JSONObject.
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);}}
comenzamos desde la conversión [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;}
luego cree una versión genérica reemplazando array.getJSONObject (i ++) con POJO
ejemplo:
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;}
Simplemente podemos convertir el JSON en una cadena legible y dividirlo usando el método "dividir" de la clase String.
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("\",\"");
No veo un toArray()método en los JSONArray()documentos. json.org/javadoc/org/json/JSONArray.html Esta pregunta probablemente no se habría hecho si hubiera una simple toArray().
javajavajavajavajava
1
net.sf.json.JSONArray tiene el método toArray (), por lo que esta respuesta funciona para esta biblioteca JSON. La pregunta no especificaba la biblioteca utilizada.
org.JSONArray
usa una ArrayList debajo del capó ...The arrayList where the JSONArray's properties are kept
, por lo que la mayoría de los bucles se hacen por nada en muchos casos (solo por la encapsulación)Respuestas:
fuente
jsonArray.get(i)
devuelve nulo (como resultado de analizar esto[ "String 1", null, "String 2" ]
)? ¿No se estrellaría entonces tu bucle for?size()
lugar delength()
.Si aún no tiene un objeto JSONArray, llame
Luego simplemente recorra eso, construyendo su propia matriz. Este código asume que es una matriz de cadenas, no debería ser difícil de modificar para adaptarse a su estructura de matriz particular.
fuente
En lugar de usar la
org.json
biblioteca incluida , intente usar Jackson o GSON, donde se trata de una frase. Con Jackson, f.ex:fuente
Tal vez sea solo una solución (no muy eficiente) pero podría hacer algo como esto:
String[] resultingArray = yourJSONarray.join(",").split(",");
Obviamente, puede cambiar el
,
separador ' ' con lo que quiera (tenía una direcciónJSONArray
de correo electrónico)fuente
Use puede usar un en
String[]
lugar de unArrayList<String>
:Reducirá la sobrecarga de memoria que tiene una ArrayList
¡Espero eso ayude!
fuente
Usando Java Streams puedes usar un
IntStream
mapeo de los objetos:fuente
Sé que esa pregunta es sobre JSONArray, pero aquí hay un ejemplo que he encontrado útil cuando no necesita usar JSONArray para extraer objetos de JSONObject.
Funciona también con una variedad de cuerdas.
fuente
Aquí hay una mejor manera de hacerlo: si obtiene los datos de la API. Luego PARSE el JSON y cárguelo en su vista de lista:
fuente
comenzamos desde la conversión [JSONArray -> List <JSONObject>]
luego cree una versión genérica reemplazando array.getJSONObject (i ++) con POJO
ejemplo:
fuente
Puede usar un en
String[]
lugar de unArrayList<String>
:¡Espero eso ayude!
fuente
fuente
Simplemente podemos convertir el JSON en una cadena legible y dividirlo usando el método "dividir" de la clase String.
fuente
Sé que la pregunta era para
Java
. Pero quiero compartir una posible soluciónKotlin
porque creo que es útil.Con Kotlin puede escribir una función de extensión que convierta una
JSONArray
matriz nativa (Kotlin):Ahora puede llamar
asArray()
directamente en unaJSONArray
instancia.fuente
¿Qué hay de usar java.util.Arrays?
fuente
toArray()
método en losJSONArray()
documentos. json.org/javadoc/org/json/JSONArray.html Esta pregunta probablemente no se habría hecho si hubiera una simpletoArray()
.