Come analizzare l'array JSON (non l'oggetto Json) in Android


Ho difficoltà a trovare un modo per analizzare JSONArray. Assomiglia a questo:

[{"name":"name1","url":"url1"},{"name":"name2","url":"url2"},...]

So come analizzarlo se il JSON è stato scritto in modo diverso (in altre parole, se avessi restituito l'oggetto json invece di un array di oggetti). Ma è tutto quello che ho e devo andare con esso.

* EDIT: è un json valido. Ho creato un'app per iPhone usando questo json, ora ho bisogno di farlo per Android e non riesco a capirlo. Ci sono molti esempi là fuori, ma sono tutti correlati a JSONObject. Mi hai bisogno di qualcosa per JSONArray.

Qualcuno può darmi qualche suggerimento, o un tutorial o un esempio?

Molto apprezzato !

Author: SteBra, 2013-09-24

10 answers

Usa il seguente frammento per analizzare JsonArray.

JSONArray jsonarray = new JSONArray(jsonStr);
for (int i = 0; i < jsonarray.length(); i++) {
    JSONObject jsonobject = jsonarray.getJSONObject(i);
    String name = jsonobject.getString("name");
    String url = jsonobject.getString("url");
}

Spero che aiuti.

 106
Author: Spring Breaker, 2016-03-23 11:54:48

Darò solo un po ' Jackson esempio:

Innanzitutto creare un titolare di dati che abbia i campi dalla stringa JSON

// imports
// ...
@JsonIgnoreProperties(ignoreUnknown = true)
public class MyDataHolder {
    @JsonProperty("name")
    public String mName;

    @JsonProperty("url")
    public String mUrl;
}

E analizzare l'elenco dei MyDataHolders

String jsonString = // your json
ObjectMapper mapper = new ObjectMapper();
List<MyDataHolder> list = mapper.readValue(jsonString, 
    new TypeReference<ArrayList<MyDataHolder>>() {});

Utilizzo delle voci dell'elenco

String firstName = list.get(0).mName;
String secondName = list.get(1).mName;
 22
Author: vilpe89, 2013-09-24 10:07:37
public static void main(String[] args) throws JSONException {
    String str = "[{\"name\":\"name1\",\"url\":\"url1\"},{\"name\":\"name2\",\"url\":\"url2\"}]";

    JSONArray jsonarray = new JSONArray(str);


    for(int i=0; i<jsonarray.length(); i++){
        JSONObject obj = jsonarray.getJSONObject(i);

        String name = obj.getString("name");
        String url = obj.getString("url");

        System.out.println(name);
        System.out.println(url);
    }   
}   

Uscita:

name1
url1
name2
url2
 18
Author: Maxim Shoustin, 2013-09-24 09:12:07

Crea una classe per contenere gli oggetti.

public class Person{
   private String name;
   private String url;
   //Get & Set methods for each field
}

Quindi deserializzare come segue:

Gson gson = new Gson();
Person[] person = gson.fromJson(input, Person[].class); //input is your String

Articolo di riferimento: http://blog.patrickbaumann.com/2011/11/gson-array-deserialization /

 9
Author: Kevin Bowersox, 2013-09-24 09:08:01

In questo esempio ci sono diversi oggetti all'interno di un array json. Cioè,

Questo è l'array json: [{"nome":"nome1","url":"url1"},{"nome":"nome2","url":"url2"},...]

Questo è un oggetto: {"nome":"nome1","url":"url1"}

Supponendo che tu abbia ottenuto il risultato in una variabile stringa chiamata jSonResultString:

JSONArray arr = new JSONArray(jSonResultString);

  //loop through each object
  for (int i=0; i<arr.length(); i++){

  JSONObject jsonProductObject = arr.getJSONObject(i);
  String name = jsonProductObject.getString("name");
  String url = jsonProductObject.getString("url");


}
 5
Author: TharakaNirmana, 2013-09-24 09:09:56

@Stebra Vedi questo esempio. Questo potrebbe aiutarti.

public class CustomerInfo 
{   
    @SerializedName("customerid")
    public String customerid;
    @SerializedName("picture")
    public String picture;

    @SerializedName("location")
    public String location;

    public CustomerInfo()
    {}
}

E quando ottieni il risultato; analizza in questo modo

List<CustomerInfo> customers = null;
customers = (List<CustomerInfo>)gson.fromJson(result, new TypeToken<List<CustomerInfo>>() {}.getType());
 3
Author: nilkash, 2013-09-24 09:09:27

Alcuni ottimi suggerimenti sono già menzionati. L'utilizzo di GSON è davvero utile e per rendere la vita ancora più facile puoi provare questo sito Si chiama jsonschema2pojo e fa esattamente questo:

Gli dai il tuo json e genera un oggetto java che può essere incollato nel tuo progetto. Puoi selezionare GSON per annotare le tue variabili, quindi estrarre l'oggetto dal tuo json diventa ancora più semplice!

 2
Author: TomCB, 2014-11-03 15:56:40

Il mio caso Esempio di caricamento dal server..

int jsonLength = Integer.parseInt(jsonObject.getString("number_of_messages"));
            if (jsonLength != 1) {
                for (int i = 0; i < jsonLength; i++) {
                    JSONArray jsonArray = new JSONArray(jsonObject.getString("messages"));
                    JSONObject resJson = (JSONObject) jsonArray.get(i);
                    //addItem(resJson.getString("message"), resJson.getString("name"), resJson.getString("created_at"));
                }

Spero che aiuti

 1
Author: bong jae choe, 2015-11-04 07:56:44
            URL url = new URL("your URL");
            connection = (HttpURLConnection) url.openConnection();
            connection.connect();
            InputStream stream = connection.getInputStream();
            BufferedReader reader;
            reader = new BufferedReader(new InputStreamReader(stream));
            StringBuffer buffer = new StringBuffer();
            String line = "";
            while ((line = reader.readLine()) != null) {
                buffer.append(line);
            }

            //setting the json string
            String finalJson = buffer.toString();

            //this is your string get the pattern from buffer.
            JSONArray jsonarray = new JSONArray(finalJson);
 -2
Author: boyke purnomo, 2016-01-30 14:31:41

Vecchio post lo so, ma a meno che non abbia frainteso la domanda, questo dovrebbe fare il trucco:

s = '[{"name":"name1","url":"url1"},{"name":"name2","url":"url2"}]';
eval("array=" + s);
for (var i = 0; i < array.length; i++) {
for (var index in array[i]) {
    alert(array[i][index]);
}

}

 -3
Author: Janus, 2015-11-09 10:34:28