Android lit JSONArray dans un JSONArray [fermé]
Question
Comment puis-je lire un tableau json qui contient un tableau json, c'est mon json
{
"product": {
"name": "myApp",
"config": [
{
"grade": "elementary school",
"courses": [
{
"name": "Math",
"teacher": "David"
}
]
}
]
}
}
par exemple, comment puis-je lire "config" puis cours, pour générer une liste qui me montre l'école primaire et si j'appuie sur ce nom, mon application me montre le nom du cours et le nom du professeur
La solution
Eh bien, tout d’abord, ce n’est pas un JSONArray ;c'est un JSONObject.Un JSONArray est désigné par des accolades ouvrantes et fermantes ([ et ], respectivement), tandis qu'un JSONObject est désigné par des parenthèses ouvrantes/fermantes ({ et }, respectivement).
Maintenant, pour répondre à votre question sur la façon de l'analyser...
Supposons que vous ayez :
String s = your_json_data;
Maintenant, pour analyser cela :
JSONObject jsonObj = new JSONObject(s);
JSONObject productJson = jsonObject.getJSONObject("product"); // May want to consider using optJSONObject for null checking in case your key/value combination doesn't exist
String name = productJson.getString("name"); // myApp
Maintenant, cela devrait vous permettre de démarrer avec les éléments de base...Passons en revue l'itération dans un JSONArray réel :
JSONArray configJsonArray = productJson.getJSONArray("config");
for(int configIterator = 0; configIterator < configJsonArray.length(); configIterator++){
JSONObject innerConfigObj = configJsonArray.getJSONObject(configIterator);
String configGrade = innerConfigObj.getString("grade");
JSONArray courseJsonArray = innerConfigObj.getJSONArray("courses");
for(int courseIterator = 0; courseIterator < courseJsonArray.length(); courseIterator++){
JSONObject innerCourseObj = innerCourseObj.getJSONObject(courseIterator);
String courseName = innerCourseObj.getString("name");
String courseTeacher = innerCourseObj.getString("teacher");
}
}
Cela devrait vous permettre de les parcourir.
Autres conseils
Voici un exemple de la façon dont vous l'analyseriez en utilisant gson - https://code.google.com/p/google-gson/.Cela rend vraiment la vie beaucoup plus facile, vous créez votre structure de classe une fois, puis vous la réutilisez simplement dans toute votre application.
package com.example.jsonparse;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import com.google.gson.Gson;
public class MainActivity extends Activity {
private static final String TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final String json = "{\"product\": {\"name\": \"myApp\",\"config\": [{\"grade\": \"elementary school\",\"courses\": [{\"name\": \"Math\",\"teacher\": \"David\"}]}]}}";
JsonParseResult result = new Gson().fromJson(json, JsonParseResult.class);
for (Config config : result.getProduct().getConfig()) {
Log.d(TAG, "Courses for grade: " + config.getGrade());
for (Course course : config.getCourses()) {
Log.d(TAG, "Course Name: " + course.getName());
Log.d(TAG, "Course Teacher: " + course.getTeacher());
}
}
}
public class JsonParseResult {
private Product product;
public JsonParseResult(Product product) {
this.product = product;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
}
public class Product {
private String name;
private List<Config> config;
public Product(String name, List<Config> config) {
this.name = name;
this.config = config;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Config> getConfig() {
return config;
}
public void setConfig(List<Config> config) {
this.config = config;
}
}
public class Config {
private String grade;
private List<Course> courses;
public Config(String grade, List<Course> courses) {
this.grade = grade;
this.courses = courses;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
public List<Course> getCourses() {
return courses;
}
public void setCourses(List<Course> courses) {
this.courses = courses;
}
}
public class Course {
private String name;
private String teacher;
public Course(String name, String teacher) {
this.name = name;
this.teacher = teacher;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTeacher() {
return teacher;
}
public void setTeacher(String teacher) {
this.teacher = teacher;
}
}
}