前言:
- 解析json的库有很多,如:JSON-Java、Gson、Jackson、FastJson…
- 而Gson是谷歌的,相信自有它的好处
简介
- 用于json与java对象之间的转换
- 通过 序列化和反序列化 实现
- 功能强大,稳定性也好
使用
- Gson提供了两个方法,可实现json对象与java对象之间的转换
方法 | 解析 |
---|---|
toJson() | 序列化:将java对象转换为json对象,生成json类型的数据 |
fromJson() | 反序列化:将json对象转换为java对象,解析json类型的数据 |
使用步骤
(准备工作)
引入库
compile 'com.google.code.gson:gson:2.8.5'
创建Gson对象
Gson gson=new Gson();
序列化(单个)
- 准备好要序列化的数据(单个)
data data1=new data();
data1.setAge(18);
data1.setName("君莫笑");
- 序列化
String json=gson.toJson(data1);
- 将结果显示到TextView上
序列化(多个)
- 准备好要序列化的数据(多个)
List<data>list=new ArrayList<data>();
data data1=new data();
data1.setAge(18);
data1.setName("君莫笑");
list.add(data1);
data data2=new data();
data2.setAge(4);
data2.setName("我已经不是3岁小孩了");
list.add(data2);
- 序列化
String json=gson.toJson(list);
json = gson.toJson(list);
- 将结果显示到TextView上
TextView tv=(TextView) findViewById(R.id.mainTextView1);
tv.setText(json);
效果图:
补:data.java
public class data
{
String name;
int age;
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return age;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
}
反序列化(单个)
- 准备要反序列化的数据(单个)
(直接引用上面的数据了)
data data1=new data();
data1.setAge(18);
data1.setName("君莫笑");
Gson gson=new Gson();
String json=gson.toJson(data1);
- 反序列化
data mydata=gson.fromJson(json,data.class);
- 将结果显示到TextView上
tv.setText("age="+mydata.getAge()+" name="+mydata.getName());
反序列化(多个)
- 准备要反序列化的数据(多个)
(直接引用上面的数据了)
List<data>list=new ArrayList<data>();
data data1=new data();
data1.setAge(18);
data1.setName("君莫笑");
list.add(data1);
data data2=new data();
data2.setAge(4);
data2.setName("我已经不是3岁小孩了");
list.add(data2);
String json = gson.toJson(list);
- 反序列化
StringBuffer stringbuffer=new StringBuffer();
data[]mydata= gson.fromJson(json,data[].class);
for(int i=0;i<d.length;i++){
stringbuffer.append("age="+d[i].getAge()+" name="+mydata[i].getName()+"\n");
}
- 将结果显示到TextView上
tv.setText(stringbuffer);
进阶
我们理想中的json
[
{
"age": 18 ,
"name": "君莫笑"
} ,
{
"age": 4 ,
"name": "我已经不是3岁小孩了"
}
]
现实中的json
{
"一班": {
"优秀生": [
{
"age": 18 ,
"name": "君莫笑"
} ,
{
"age": 4 ,
"name": "我已经不是3岁小孩了"
}
]
"差等生": [
{
"age": 26 ,
"name": "把酒一杯"
} ,
{
"age": 12 ,
"name": "以我为王"
}
]
}
"二班": {
"优秀生": [
{
"age": 15 ,
"name": "小魔仙"
} ,
{
"age": 999 ,
"name": "巫女"
}
]
}
}
解析json
json的数据有很多,但我们只需要解析我们需要的部分,具体如下:
String myjson=new JSONObject(json).getJSONObject("一班").getJSONArray("优秀生").toString();
StringBuffer stringbuffer=new StringBuffer();
data[]mydata= gson.fromJson(myjson,data[].class);
for(int i=0;i<mydata.length;i++){
stringbuffer.append("age="+mydata[i].getAge()+" name="+mydata[i].getName()+"\n");
}
将结果显示到TextView上
tv.setText(stringbuffer);