一起Talk Android吧(第三百五十回:解析JSON数组五)
Posted talk_8
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起Talk Android吧(第三百五十回:解析JSON数组五)相关的知识,希望对你有一定的参考价值。
各位看官们,大家好,上一回中咱们说的是android中解析JSON对象的例子,这一回中咱们介绍的例子是解析JSON数组。闲话休提,言归正转。让我们一起Talk Android吧!
看官们,本章回中我们将介绍特殊的JSON数组,此数组和上一章回中解析的混合数组类似,特殊之处在于key的string没有英文,只有数字,生成的JavaBean类比较特殊。下面是一个示例数据,请大家参考:
"age":20,"list":"0":"id":33,"name":"Jack","1":"id":98,"name":"Nik"
注意一下key的值为0和1这样的字符串,不带有英文字符。这里涉及三种解析:普通标量解析、JSON对象解析、JSON数组解析。和解析混合数组一样使用分层的思路进行解析。
分层思路:
使用GsonFormat创建JavaBean类,先解析主类再解析子类,也就是从外到内一层一层地解析.这个示例中包含三层(最外层一个主类,主类中包含两个子类)
- 第一层解析获取JSON对象 ;
- 第二层解析获取获取JSON对象和JSON数组;
- 第三层解析是从第二层解析到的JOSON数组中获取JSON对象
这里的解析思路也是使用了分层思路,特殊之处在于转换成Java对象时,内部类的名称比较特殊。因为JSON数据的key中只有数字没有英文,因此GsonFormat工具自动生成了特殊的内部类名:_$1Bean,详细可以查看示例程序中代码。如果觉得这样的名字不好,可以自己手动修改。下面是示例程序,程序中包含GsonFormat自动生成的JavaBean类和解析程序:
import com.google.gson.annotations.SerializedName;
public class JavaBeanSpecial
/**
* age : 20
* list : "0":"id":33,"name":"Jack","1":"id":98,"name":"Nik"
*/
private int age;
private ListBean list;
public int getAge()
return age;
public void setAge(int age)
this.age = age;
public ListBean getList()
return list;
public void setList(ListBean list)
this.list = list;
public static class ListBean
/**
* 0 : "id":33,"name":"Jack"
* 1 : "id":98,"name":"Nik"
*/
@SerializedName("0")
private _$0Bean _$0;
@SerializedName("1")
private _$1Bean _$1;
public _$0Bean get_$0()
return _$0;
public void set_$0(_$0Bean _$0)
this._$0 = _$0;
public _$1Bean get_$1()
return _$1;
public void set_$1(_$1Bean _$1)
this._$1 = _$1;
public static class _$0Bean
/**
* id : 33
* name : Jack
*/
private int id;
private String name;
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;
@Override
public String toString()
return "_$0Bean" +
"id=" + id +
", name='" + name + '\\'' +
'';
public static class _$1Bean
/**
* id : 98
* name : Nik
*/
private int id;
private String name;
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;
@Override
public String toString()
return "_$1Bean" +
"id=" + id +
", name='" + name + '\\'' +
'';
@Override
public String toString()
return "ListBean" +
"_$0=" + _$0 +
", _$1=" + _$1 +
'';
@Override
public String toString()
return "JavaBeanSpecial" +
"age=" + age +
", list=" + list +
'';
private void parseJsonSpecialByJavaNative()
String jsonDataStr = "\\"age\\":20,\\"list\\":\\"0\\":\\"id\\":33,\\"name\\":\\"Jack\\",\\"1\\":\\"id\\":98,\\"name\\":\\"Nik\\"\\n";
try
JSONObject jsonObject = new JSONObject(jsonDataStr);
//解析第一层
int age = jsonObject.optInt("age");
JSONObject jsonObjectLevel1 = jsonObject.optJSONObject("list");
//解析第二层,注意这里的key是数字,不包含英文
JSONObject jsonObjectLevel2_1 = jsonObjectLevel1.optJSONObject("0");
JSONObject jsonObjectLevel2_2 = jsonObjectLevel1.optJSONObject("1");
//解析第三层,同时转换第三层
JavaBeanSpecial.ListBean._$0Bean special1 = new JavaBeanSpecial.ListBean._$0Bean();
special1.setId(jsonObjectLevel2_1.optInt("id"));
special1.setName(jsonObjectLevel2_1.optString("name"));
JavaBeanSpecial.ListBean._$1Bean special2 = new JavaBeanSpecial.ListBean._$1Bean();
special2.setId(jsonObjectLevel2_2.optInt("id"));
special2.setName(jsonObjectLevel2_2.optString("name"));
//转换第二层
JavaBeanSpecial.ListBean listBean = new JavaBeanSpecial.ListBean();
listBean.set_$0(special1);
listBean.set_$1(special2);
//转换第一层
JavaBeanSpecial javaBeanSpecial = new JavaBeanSpecial();
javaBeanSpecial.setAge(age);
javaBeanSpecial.setList(listBean);
Log.d(TAG, "parseJsonSpecialByJavaNative: "+javaBeanSpecial.toString());
catch (JSONException e)
e.printStackTrace();
编译并且运行上面的程序,可以得到以下解析后的结果:
parseJsonSpecialByJavaNative: JavaBeanSpecialage=20, list=ListBean_$0=_$0Beanid=33, name='Jack', _$1=_$1Beanid=98, name='Nik'
看官们,关于Android中解析JSON数组的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!
以上是关于一起Talk Android吧(第三百五十回:解析JSON数组五)的主要内容,如果未能解决你的问题,请参考以下文章
一起Talk Android吧(第三百五十七回:Gson库解析JSON数据总结)
一起Talk Android吧(第三百五十八回:Gson库解析Java对象)
一起Talk Android吧(第三百五十二回:Gson库解析JSON对象)
一起Talk Android吧(第三百五十三回:Gson库解析JSON数组一)