27.1 JSON
27.1.1 什么是JSON
-
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式
-
客户端(浏览器端)与服务器端交互: xml ison
-
本质 就是具有特定格式的字符串
-
JSON数据 已经是客户端与服务器端交互的最常用的选择,已经很少使用xml来进行数据交互了
27.1.2 JSON数据格式
①整体结构:
String json1 = “{“id” : 12,“name”: “Tom”]”;
String json2 = “[{“id”: 12,“name”:“Tom”}, {“id”: 12,“name”: “Tom”}]";
Json数组:[] ArrayList
Json对象:{} HashMap
②Json数组的结构:
[value1, value2, value3]
③Json对象的结构:
{key1:value1, key2:value2, key3:value3}
④key的数据类型:字符串
⑤value的数据类型:
- 数值(包含整数和小数)
- 字符串
- null
- json数组[] String isonArr = “[value1,value2,value3,value4]”; “[1,2,3]”
- json对象{} String jsonObject = “{key1:value1,key2:value2,key3:value3}”;
⑥例子:
[1,“ab",[], {“n”:123,“b":“abc”}] [1, “a":3]
{“nam"TOM”, “age”:12} {“a”,“a”, [3]}
27.1.3 JSON数据解析
1)解析技术:
Android原生API :编程相对麻烦
Gson框架:编码简洁,项目首选
2)解析方向:
服务器端:将java对象(包含集合)转换为json格式字符串
客户端:将json格式字符串转换为java对象(包含集合)
27.1.4相关API
1)Android原生API:
IsonObiect类:json对象{}
- JSONObject(String json) :将ison字符串解析为json对象
- Xxx getxxx(String name) :根据name,在json对象中得到对应的Value
JsonArray类: json数组 []
-
JSONArrayString json) :将ison字符串解析为json数组
-
int length() :得到json数组中元素的个数
-
Xxgetxx(intindex):根据下标得到json数组中对应的元素数据
JSONObject json=new JSONObject(str);
String obj=json.getString("weatherinfo");
JSONObject json2=new JSONObject(obj);
System.out.println(json2.getString("city"));
- Gson框架API
Gson: 能解析json数据的类
- Gson() :构造对象的方法
- String tolson(Object src) :将对象转换为对应格式的json字符串
- T fromJson(String json, Type typeOfT) :解析Json字符串,得到对象
TypeToken :用来得到Type的类
-
protected TypeToken() :受保存的构造方法
-
Type getType():得到类型对象
引入类库到工程:创建json对应的对象实体类
Gson gson=new Gson();
Weatherinfo w= gson.fromJson(str,Weatherinfo.class);
//类型
//对象数组
//List<Weatherinfo> list = gson.fromJson(str,new TypeToken<List<Weatherinfo>> (){}.getType());
27.1.5测试
测试解析{}
//单个json
{
"id":2, "name":"大虾",
"price":12.3,
"imagePath":"http://192.168.10.165:8080/LO5_ Server/images/f1.jpg"
}
测试解析[]
//数组json
[
{
"id":1, "name'":"大虾1",
"price":12.3,
"imagePath":"http://192.168.10.165:8080/f1jpg"
},
{
"id":2, "name":"大虾2",
"price":12.5,
"imagePath":"http://192.168.10.165:8080/f2.jpg"
}
]