Table des matières
Analyser JSON dans Android
View more Tutorials:

JSON (JavaScript Object Notation) est un format d'échange des données (data exchange format). Il stocke des données par des paires de clés- valeurs. JSON est plus simple et plus lisible que XML.
Observez un simple exemple de JSON:
{ "name" : "Tran", "address" : "Hai Duong, Vietnam", "phones" : [0121111111, 012222222] }
Des paires clé- valeur peuvent s'insérer:
{ "id": 111 , "name":"Microsoft", "websites": [ "http://microsoft.com", "http://msn.com", "http://hotmail.com" ], "address":{ "street":"1 Microsoft Way", "city":"Redmond" } }
En Java, il y a plusieurs bibliothèques de source ouverte qui vous aide de manipulier avec des fichiers JSON, par exemple:
- JSONP
- json.org
- Jackson
- Google GSON
- json-lib
- javax json
- json-simple
- json-smart
- flexjson
- fastjson
Android soutient la bibliothèque pour qu'elle travaille avec JSON, vous ne devez pas déclarer de bibliothèque quelconque. Dans ce document je vais vous apprendre de manipuler avec JSON en utilisant JSON API qui est disponible dans le système d'exploitation Android.
L'illustration ci- dessous décrit le rapport entre JSON et des classes Java.

Je crée rapidement un projet baptisé JSONTutorial afin de travailler avec JSON à travers des exemples.

- Name: JSONTutorial
- Package name: org.o7planning.jsontutorial


Créez le fichier raw:



Je crée un autre fichier json dans le dossier 'raw', ces fichiers seront utilisés dans l'un des exemples dans ce document.
Des fournisseurs des données JSON sont compris dans des fichiers ou URL,... Vous pouvez voir des exemples qui récupent des données JSON de URL, analysent et présentent sur une application Android à la fin de ce document.

company.json
{ "id": 111 , "name":"Microsoft", "websites": [ "http://microsoft.com", "http://msn.com", "http://hotmail.com" ], "address":{ "street":"1 Microsoft Way", "city":"Redmond" } }
Concevez activity_main.xml:

activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <EditText android:id="@+id/editText" android:layout_width="0dp" android:layout_height="220dp" android:layout_marginStart="16dp" android:layout_marginLeft="16dp" android:layout_marginTop="16dp" android:layout_marginEnd="16dp" android:layout_marginRight="16dp" android:ems="10" android:inputType="none|textMultiLine" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="39dp" android:text="Running the Example" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/editText" /> </androidx.constraintlayout.widget.ConstraintLayout>
Quelques classes sont utilisées dans des exemples:
Address.java
package org.o7planning.jsontutorial.beans; public class Address { private String street; private String city; public Address() { } public Address(String street, String city) { this.street = street; this.city = city; } public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } @Override public String toString() { return street + ", " + city; } }
Company.java
package org.o7planning.jsontutorial.beans; public class Company { private int id; private String name; private String[] websites; private Address address; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String[] getWebsites() { return websites; } public void setWebsites(String[] websites) { this.websites = websites; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("\n id:" + this.id); sb.append("\n name:" + this.name); if (this.websites != null) { sb.append("\n website: "); for (String website : this.websites) { sb.append(website + ", "); } } if (this.address != null) { sb.append("\n address:" + this.address.toString()); } return sb.toString(); } }
Dans ce document, nous allons lire le fichier des données JSON et le transformer en objet Java.

ReadJSONExample.java
package org.o7planning.jsontutorial.json; import android.content.Context; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.o7planning.jsontutorial.R; import org.o7planning.jsontutorial.beans.Address; import org.o7planning.jsontutorial.beans.Company; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public class ReadJSONExample { // Read the company.json file and convert it to a java object. public static Company readCompanyJSONFile(Context context) throws IOException,JSONException { // Read content of company.json String jsonText = readText(context, R.raw.company); JSONObject jsonRoot = new JSONObject(jsonText); int id= jsonRoot.getInt("id"); String name = jsonRoot.getString("name"); JSONArray jsonArray = jsonRoot.getJSONArray("websites"); String[] websites = new String[jsonArray.length()]; for(int i=0;i < jsonArray.length();i++) { websites[i] = jsonArray.getString(i); } JSONObject jsonAddress = jsonRoot.getJSONObject("address"); String street = jsonAddress.getString("street"); String city = jsonAddress.getString("city"); Address address= new Address(street, city); Company company = new Company(); company.setId(id); company.setName(name); company.setAddress(address); company.setWebsites(websites); return company; } private static String readText(Context context, int resId) throws IOException { InputStream is = context.getResources().openRawResource(resId); BufferedReader br= new BufferedReader(new InputStreamReader(is)); StringBuilder sb= new StringBuilder(); String s= null; while(( s = br.readLine())!=null) { sb.append(s); sb.append("\n"); } return sb.toString(); } }
MainActivity.java
package org.o7planning.jsontutorial; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import org.o7planning.jsontutorial.beans.Company; import org.o7planning.jsontutorial.json.ReadJSONExample; public class MainActivity extends AppCompatActivity { private EditText outputText; private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.outputText = (EditText)this.findViewById(R.id.editText); this.button = (Button) this.findViewById(R.id.button); this.button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { runExample(view); } }); } public void runExample(View view) { try { Company company = ReadJSONExample.readCompanyJSONFile(this); outputText.setText(company.toString()); } catch(Exception e) { outputText.setText(e.getMessage()); e.printStackTrace(); } } }
Exécutez l'exemple:

L'exemple de la transformation d'un objet Java en des données JSON.

JsonWriterExample.java
package org.o7planning.jsontutorial.json; import android.util.JsonWriter; import org.o7planning.jsontutorial.beans.Address; import org.o7planning.jsontutorial.beans.Company; import java.io.IOException; import java.io.Writer; public class JsonWriterExample { public static void writeJsonStream(Writer output, Company company ) throws IOException { JsonWriter jsonWriter = new JsonWriter(output); jsonWriter.beginObject();// begin root jsonWriter.name("id").value(company.getId()); jsonWriter.name("name").value(company.getName()); String[] websites= company.getWebsites(); // "websites": [ ....] jsonWriter.name("websites").beginArray(); // begin websites for(String website: websites) { jsonWriter.value(website); } jsonWriter.endArray();// end websites // "address": { ... } jsonWriter.name("address").beginObject(); // begin address jsonWriter.name("street").value(company.getAddress().getStreet()); jsonWriter.name("city").value(company.getAddress().getCity()); jsonWriter.endObject();// end address // end root jsonWriter.endObject(); } public static Company createCompany() { Company company = new Company(); company.setId(123); company.setName("Apple"); String[] websites = { "http://apple.com", "https://jobs.apple.com" }; company.setWebsites(websites); Address address = new Address(); address.setCity("Cupertino"); address.setStreet("1 Infinite Loop"); company.setAddress(address); return company; } }
MainActivity.java (2)
package org.o7planning.jsontutorial; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import org.o7planning.jsontutorial.beans.Company; import org.o7planning.jsontutorial.json.JsonWriterExample; import java.io.StringWriter; public class MainActivity extends AppCompatActivity { private EditText outputText; private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.outputText = (EditText)this.findViewById(R.id.editText); this.button = (Button) this.findViewById(R.id.button); this.button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { runExample(view); } }); } public void runExample(View view) { try { StringWriter output = new StringWriter(); Company company = JsonWriterExample.createCompany(); JsonWriterExample.writeJsonStream(output, company); String jsonText = output.toString(); outputText.setText(jsonText); } catch(Exception e) { outputText.setText(e.getMessage()); e.printStackTrace(); } } }
L'exécution de l'application:

To read JSON from a URL, you need to use Android Networking techniques, download the JSON file, and parse it.