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

Était-ce utile?

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;
        }
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top