Android analiza la matriz json con clave incierta y la matriz con formato irregular

Primer vistazo a una pieza de datos json

{
    
    
	"datas": {
    
    
		"0": {
    
    
			"name": "李雷",
			"gender": "男"
		},
		"1": {
    
    
			"name": "韩梅梅",
			"gender": "女"
		},
		"2": {
    
    
			"name": "Tom",
			"gender": "男"
		}
	}
}

este. . .
Si usa GsonFormat para generar beans en Android, se volverá así:
inserte la descripción de la imagen aquí
por supuesto, este tipo de json no estándar puede llamarse modificación de back-end, pero si le da una oración: "¿Está bien para ios? Vamos en, vamos... algo así" ¿qué hacer? O todas sus interfaces están en este formato. . . Por ejemplo:

Un chat real con otro colega de Android
Bueno, analicemos este json frustrante:

Tome el json que se muestra al principio como ejemplo, cree un StudentBean, use el complemento GsonFormat para generar código, solo intercepte la parte "matriz" y empalme una clave (aquí tomamos estudiante como ejemplo), como se muestra en la figura:
inserte la descripción de la imagen aquí

 student根据自己的情况命名,头部尾部添加 “{” 、“}”

Analicemos los datos json nuevamente. En realidad, es una matriz de datos, pero la clave es incierta y puede representarse mediante un mapa (la clave de los datos json es "datos", por lo que el mapa aquí debería llamarse datos):

Map<String,Student> datas;

El StudentBean final se ve así:

public class StudentBean {
    
    
    Map<String,Student> datas;

    public Map<String, Student> getDatas() {
    
    
        return datas;
    }

    public void setDatas(Map<String, Student> datas) {
    
    
        this.datas = datas;
    }

    /**
     * student : {"name":"Tom","gender":"男"}
     */

    private Student student;

    public Student getStudent() {
    
    
        return student;
    }

    public void setStudent(Student student) {
    
    
        this.student = student;
    }

    public static class Student {
    
    
        /**
         * name : Tom
         * gender : 男
         */

        private String name;
        private String gender;

        public String getName() {
    
    
            return name;
        }

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

        public String getGender() {
    
    
            return gender;
        }

        public void setGender(String gender) {
    
    
            this.gender = gender;
        }
    }
}

Analizar gramaticalmente:

 final String jsonTest = "{
    
    
	"datas": {
    
    
		"0": {
    
    
			"name": "李雷",
			"gender": "男"
		},
		"1": {
    
    
			"name": "韩梅梅",
			"gender": "女"
		},
		"2": {
    
    
			"name": "Tom",
			"gender": "男"
		}
	}
   }";
        Gson gs = new Gson();
        StudentBean bean = gs.fromJson(jsonTest.trim(), StudentBean.class);
        Map<String, StudentBean.Student> studentMap = bean.getDatas();  
        for (String key : studentMap.keySet()) {
    
                            
            System.out.println("key:" + key);
            System.out.println(studentMap.get(key).getName());
            System.out.println(studentMap.get(key).getGender());
        }

StudentBean ha descrito correctamente el formato de los datos json, y puede usar Gson.formJson para obtener la clase de entidad
Map<String, StudentBean.Student>: String corresponde a la clave incierta en los datos: "0", "1", "2", StudentBean.Student son los datos que queremos obtener.
Finalmente, recorra el mapa para obtener los datos del Estudiante y genere el resultado:

inserte la descripción de la imagen aquí

Línea divisoria///

Más tarde, datos como este aparecieron de nuevo, y el campo de datos de afuera desapareció =-=:

{
    
    
    "0": {
    
    
        "name": "李雷",
        "gender": "男"
    },
    "1": {
    
    
        "name": "韩梅梅",
        "gender": "女"
    },
    "2": {
    
    
        "name": "Tom",
        "gender": "男"
    }
}

Esta situación es aún más simple, simplemente atraviese JSONObject directamente:

 String test="{
    
    
    "0": {
    
    
        "name": "李雷",
        "gender": "男"
    },
    "1": {
    
    
        "name": "韩梅梅",
        "gender": "女"
    },
    "2": {
    
    
        "name": "Tom",
        "gender": "男"
    }
};
        try {
    
    
            JSONObject jsonObject = new JSONObject(test);
            Iterator<String> keys = jsonObject.keys();
            while (keys.hasNext()) {
    
    
                String key = keys.next();
                StudentBean.Student student = new Gson().fromJson(jsonObject.getString(key), StudentBean.Student.class);
                System.out.println(key +" "+ student.getName() +"  "+ student.getGender());
            }
        } catch (JSONException e) {
    
    
            e.printStackTrace();
        }

Resultado:
inserte la descripción de la imagen aquí
línea dividida ///
y luego:

[   
    {
    
    
		"name": "李雷",
		"gender": "男"
	},
	{
    
    
		"name": "韩梅梅",
		"gender": "女"
	},
	{
    
    
		"name": "Tom",
		"gender": "男"
	}
]

¡Está bien! De hecho es casi lo mismo, vamos directamente al código:

 String jsonData = "[   \n" +
                "    {\n" +
                "\t\t\"name\": \"李雷\",\n" +
                "\t\t\"gender\": \"男\"\n" +
                "\t},\n" +
                "\t{\n" +
                "\t\t\"name\": \"韩梅梅\",\n" +
                "\t\t\"gender\": \"女\"\n" +
                "\t},\n" +
                "\t{\n" +
                "\t\t\"name\": \"Tom\",\n" +
                "\t\t\"gender\": \"男\"\n" +
                "\t}\n" +
                "]";
        System.out.println("jsonData=" + jsonData);
        try {
    
    
            JSONArray itemArray = new JSONArray(jsonData);
            for (int i = 0; i < itemArray.length(); i++) {
    
    
                StudentBean.Student bean = new Gson().fromJson(itemArray.get(i).toString(), StudentBean.Student.class);
                System.out.println(bean.getName());
                System.out.println(bean.getGender());
            }
        } catch (JSONException e) {
    
    
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

resultado de la operación:
inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_40652755/article/details/109764428
Recomendado
Clasificación