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í:
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:
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:
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:
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:
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: