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 !
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.
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;
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
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 /
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");
}
@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());
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!
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
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);
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]);
}
}