Android analiza los datos en formato JSON

Analizar datos en formato JSON

En comparación con XML, la principal ventaja de JSON es que es más pequeño y puede ahorrar más tráfico cuando se transmite en la red. Pero la desventaja es que tiene una semántica deficiente y no parece tan intuitivo como XML.

Antes de comenzar, debemos crear un nuevo archivo get_data.json en el directorio Apache \ htdocs, luego editar este archivo y agregar el siguiente contenido en formato JSON:

[{"Id": "5", "versión": "5.5", "nombre": "Choque de clanes"},
{"id": "6", "versión": "7.0", "nombre": "Boom Beach"},
"id": "7", "versión": "3.5", "nombre": "Clash Royale"]

Visite la URL http://127.0.0.1/get_data.json y debería aparecer el contenido que se muestra en la Figura 9.8.
Escriba la descripción de la imagen aquí
Comencemos a analizar estos datos en Android

Usar JSONObject

 private void sendRequestWithOkHttp() {
    
    
        new Thread(new Runnable() {
    
    
            @Override
            public void run() {
    
    
                try {
    
    
                OkHttpClient client = new OkHttpClient();
                Request request = new Request.Builder()
                        //指定访问的服务器地址是电脑本机
                        .url("http://10.0.2.2/get_data.json")
                        .build();

                    Response response = client.newCall(request).execute();
                    String responseData = response.body().string();
                    parseJSONWithJSNOObject(responseData);
                } catch (IOException e) {
    
    
                    e.printStackTrace();
                }
          }
        }).start();
    }
private void parseJSONWithJSNOObject(String jsonData){
    
    
	        try {
    
    
	            JSONArray jsonArray = new JSONArray(jsonData);
	            for (int i = 0;i < jsonArray.length();i++){
    
    
	                JSONObject jsonObject = jsonArray.getJSONObject(i);
	                String id = jsonObject.getString("id");
	                String name = jsonObject.getString("name");
	                String version = jsonObject.getString("version");
	                Log.d("MainActivity","id is"+id);
	                Log.d("MainActivity","name is"+name);
	                Log.d("MainActivity","version is"+version);
	            }
	        } catch (JSONException e) {
    
    
	            e.printStackTrace();
	        }
	    }

Defina una matriz JSONArray y pase los datos devueltos por el servidor; luego recorra esta matriz, y cada elemento extraído es un objeto JSONObject, y cada objeto JSONObject contendrá campos, y el método get puede extraer los datos.

Dos, GSON

Dado que es una biblioteca de código abierto, debe importar
compile'com.google.code.gson: gson: 2.7 ' en el archivo app / build.gradle. La
biblioteca GSON es principalmente para mapear automáticamente una cadena de formato JSON en un objeto, por lo que no hay necesidad de escribir código manualmente para su análisis.

Por ejemplo, un dato en formato JSON es el siguiente:

{“name”:”ads”, “age”:”12”} 

Podemos definir una clase y agregar los dos campos de nombre y edad. Los datos JSON se pueden analizar automáticamente en un objeto Persona a través del siguiente código.

Gson gson = new Gson(); 
Person person = gson.fromJson(jsonData, Person.class);

Si está analizando una matriz JSONS, puede utilizar los siguientes métodos:

List<Person> person = gson.fromJson(jsonData, new TypeToken<List<Person>>(){}.getType());

La sintaxis básica es la siguiente. Primero, agregue una clase de aplicación y agregue los tres campos id, nombre y versión, como se muestra a continuación:

public class JSONData {
    
    
    String id;
    String version;
    String name;

    public String getName() {
    
    
        return name;
    }

    public String getId() {
    
    
        return id;
    }

    public String getVersion() {
    
    
        return version;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public void setId(String id) {
    
    
        this.id = id;
    }

    public void setVersion(String version) {
    
    
        this.version = version;
    }
}

MainActivity.java

 private void sendHttpRequset() {
    
    
	        new Thread(new Runnable() {
    
    
	            @Override
	            public void run() {
    
    
	                try {
    
    
	                    OkHttpClient client = new OkHttpClient.Builder()
	                            .writeTimeout(60, TimeUnit.SECONDS)
	                            .readTimeout(60, TimeUnit.SECONDS)
	                            .connectTimeout(100, TimeUnit.SECONDS)
	                            .build();
	//                    OkHttpClient client = new OkHttpClient();
	                    Request requset = new Request.Builder()
	                            // 指定服务器的地址 - 10.0.2.2对于模拟器来说就是电脑本机的IP地址
	                            .url("http://10.0.2.2/get_data.json")
	                            .build();
	                    Response response = client.newCall(requset).execute();
	                    String responseData = response.body().string();
	                    parseJSONWithGSON(responseData);
	                } catch (Exception e) {
    
    
	                    e.printStackTrace();
	                }
	            }
	        }).start();
	    }

	 private void parseJSONWithGSON(String jsonData) {
    
    
	        Gson gson = new Gson();
	        List<JSONData> jsonDataList = gson.fromJson(jsonData, new TypeToken<List<JSONData>>(){
    
    }.getType());
	        for(JSONData data : jsonDataList){
    
    
	            Log.d(TAG, "id is:"+data.getId());
	            Log.d(TAG, "id is:"+data.getName());
	            Log.d(TAG, "id is:"+data.getVersion());
	        }
	    }

Supongo que te gusta

Origin blog.csdn.net/i_nclude/article/details/77985038
Recomendado
Clasificación