166 votes

Comment analyser le JSON dans Android

Où puis-je trouver des instructions étape par étape les instructions sur la façon d'analyser un flux JSON dans Android? Je suis juste un Android débutant qui souhaite apprendre.

245voto

bbedward Points 2547

Android dispose de tous les outils dont vous avez besoin pour parser json intégré. L'exemple qui suit, pas besoin de GSON ou quelque chose comme ça.

Obtenez votre JSON:

DefaultHttpClient   httpclient = new DefaultHttpClient(new BasicHttpParams());
HttpPost httppost = new HttpPost(http://someJSONUrl/jsonWebService);
// Depends on your web service
httppost.setHeader("Content-type", "application/json");

InputStream inputStream = null;
String result = null;
try {
    HttpResponse response = httpclient.execute(httppost);           
    HttpEntity entity = response.getEntity();

    inputStream = entity.getContent();
    // json is UTF-8 by default
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
    StringBuilder sb = new StringBuilder();

    String line = null;
    while ((line = reader.readLine()) != null)
    {
        sb.append(line + "\n");
    }
    result = sb.toString();
} catch (Exception e) { 
    // Oops
}
finally {
    try{if(inputStream != null)inputStream.close();}catch(Exception squish){}
}

maintenant que vous avez votre JSON, et alors?

Créer un JSONObject:

JSONObject jObject = new JSONObject(result);

Pour obtenir une chaîne de caractères

String aJsonString = jObject.getString("STRINGNAME");

Pour obtenir une booléenne

boolean aJsonBoolean = jObject.getBoolean("BOOLEANNAME");

Pour obtenir une entière spécifique

int aJsonInteger = jObject.getInt("INTEGERNAME");

Pour obtenir une longue

long aJsonLong = jObject.getBoolean("LONGNAME");

Pour obtenir une double

double aJsonDouble = jObject.getDouble("DOUBLENAME");

Pour obtenir une JSONArray:

JSONArray jArray = jObject.getJSONArray("ARRAYNAME");

Pour obtenir les éléments de la matrice

for (int i=0; i < jArray.length(); i++)
{
    try {
        JSONObject oneObject = jArray.getJSONObject(i);
        // Pulling items from the array
        String oneObjectsItem = oneObject.getString("STRINGNAMEinTHEarray");
        String oneObjectsItem2 = oneObject.getString("anotherSTRINGNAMEINtheARRAY");
    } catch (JSONException e) {
        // Oops
    }
}

23voto

www.9android.net Points 131
  1. Écrit JSON Analyseur de Classe

    public class JSONParser {
    
        static InputStream is = null;
        static JSONObject jObj = null;
        static String json = "";
    
        // constructor
        public JSONParser() {}
    
        public JSONObject getJSONFromUrl(String url) {
    
            // Making HTTP request
            try {
                // defaultHttpClient
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);
    
                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();
    
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(
                        is, "iso-8859-1"), 8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
                }
                is.close();
                json = sb.toString();
            } catch (Exception e) {
                Log.e("Buffer Error", "Error converting result " + e.toString());
            }
    
            // try parse the string to a JSON object
            try {
                jObj = new JSONObject(json);
            } catch (JSONException e) {
                Log.e("JSON Parser", "Error parsing data " + e.toString());
            }
    
            // return JSON String
            return jObj;
    
        }
    }
    
  2. L'analyse des Données JSON Une fois que vous avez créé un analyseur de classe prochaine chose est de savoir comment utiliser cette classe. Ci-dessous, je vais expliquer comment parser le json (pris dans cet exemple) à l'aide de l'analyseur de classe.

2.1. Stocker tous ces noms de nœud dans les variables: Dans les contacts json nous avons des éléments comme le nom, l'email, l'adresse, le sexe et les numéros de téléphone. Donc, la première chose est de retenir tous ces noms de nœud dans les variables. Ouvrez votre principale activité de la classe et de déclarer stocker tous les noms des nœuds de variables statiques.

// url to make request
private static String url = "http://api.9android.net/contacts";

// JSON Node names
private static final String TAG_CONTACTS = "contacts";
private static final String TAG_ID = "id";
private static final String TAG_NAME = "name";
private static final String TAG_EMAIL = "email";
private static final String TAG_ADDRESS = "address";
private static final String TAG_GENDER = "gender";
private static final String TAG_PHONE = "phone";
private static final String TAG_PHONE_MOBILE = "mobile";
private static final String TAG_PHONE_HOME = "home";
private static final String TAG_PHONE_OFFICE = "office";

// contacts JSONArray
JSONArray contacts = null;

2.2. Utilisation de l'analyseur de classe pour obtenir JSONObject et en parcourant chaque json élément. Ci-dessous, je suis la création d'une instance de JSONParser de la classe et de l'aide pour la boucle je suis en parcourant chaque json élément et enfin le stockage de chaque données json dans la variable.

// Creating JSON Parser instance
JSONParser jParser = new JSONParser();

// getting JSON string from URL
JSONObject json = jParser.getJSONFromUrl(url);

try {
    // Getting Array of Contacts
    contacts = json.getJSONArray(TAG_CONTACTS);

    // looping through All Contacts
    for(int i = 0; i < contacts.length(); i++){
        JSONObject c = contacts.getJSONObject(i);

        // Storing each json item in variable
        String id = c.getString(TAG_ID);
        String name = c.getString(TAG_NAME);
        String email = c.getString(TAG_EMAIL);
        String address = c.getString(TAG_ADDRESS);
        String gender = c.getString(TAG_GENDER);

        // Phone number is agin JSON Object
        JSONObject phone = c.getJSONObject(TAG_PHONE);
        String mobile = phone.getString(TAG_PHONE_MOBILE);
        String home = phone.getString(TAG_PHONE_HOME);
        String office = phone.getString(TAG_PHONE_OFFICE);

    }
} catch (JSONException e) {
    e.printStackTrace();
}

13voto

Laurence Dawson Points 4837

J'ai codé un exemple simple pour vous et annoté de la source. L'exemple montre comment récupérer json et analyser en un JSONObject pour le détail de l'extraction:

try{
    // Create a new HTTP Client
    DefaultHttpClient defaultClient = new DefaultHttpClient();
    // Setup the get request
    HttpGet httpGetRequest = new HttpGet("http://example.json");

    // Execute the request in the client
    HttpResponse httpResponse = defaultClient.execute(httpGetRequest);
    // Grab the response
    BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(), "UTF-8"));
    String json = reader.readLine();

    // Instantiate a JSON object from the request response
    JSONObject jsonObject = new JSONObject(json);

} catch(Exception e){
    // In your production code handle any errors and catch the individual exceptions
    e.printStackTrace();
}

Une fois que vous avez votre JSONObject consultez le kit de développement SDK pour plus de détails sur la façon d'extraire les données dont vous avez besoin.

0voto

Zubair Ahmad Khan Points 553

Essayez de suivre ce tutoriel http://www.androidhive.info/2012/01/android-json-parsing-tutorial/ Espérons que cela vous aidera à démarrer avec JSONParsing

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X