实习周记(十):JSON
JSON数据的使用
开发过程中,经常会涉及到各种数据交互,项目中使用json这种数据交换格式,采用fastjson库进行数据转换
JSON
一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据
JSON字符串
{
"test":"测试"
}
通过单引号或者双引号包裹起来的数据
JSON对象
{
"name":"chenchenchen",
"age":22
}
语法格式
-
数据包含于括号中
-
数据以"键:值"对的形式出现
-
键值对间通过括号分隔离
JSON对象数组
{
"list":[
{"name": "张三", "age": 22},
{"name": "李四", "age": 23},
{"name": "王五", "age": 24}
],
"test":"测试"
}
1:数据在方括号中
2:方括号中每个数据以json对象形式出现
3:每两个数据以逗号分隔
例子
{
"uin": "1",
"userid": "5",
"ver": "1.0.0",
"device": "1",
"apiid": 2,
"country": "CN",
"lang": 0,
"token": "1",
"data":{
"":""
},
"cmd": "",
"auth": "1",
"time": 1
}
fastjson
fastjson.jar是阿里巴巴开发的一款专门用于Java开发的包,可以方便的实现json对象与JavaBean对象的转换,实现JavaBean对象与json字符串的转换,实现json对象与json字符串的转换
原理
在该包中,主要有三个类,JSON,JSONArray和JSONObject,后两者继承与JSON类,其中
- JSONObject实现了Map接口,而json数据又是通过键值对的方式存储,我们可以推测JSONObject的底层由Map实现,
- JSONArray实现了List接口,json数组对象中存储的为一个个json对象,我们可以对其进行删改,操作方法同List
常用api
{
"code": 0,
"data": {
"map_list": [{
"select": {
"lang": 0,
"country": "CN",
"size": 1,
"worldtype": "1",
"ver": 12039,
"uin_icon": "-42",
"dir": "12",
"thumb_md5": "1",
"node": "1",
"name_checked": 1,
"intros_thumb": {
"1": "1",
"checked": 1
},
"canrecord": "0",
"have_mod": "1",
"md5": "1",
"down24_ct": 1,
"share_version": "1",
"score": 30,
"black_stat": 0,
"open": 1,
"uin": 1,
"intropics": [
{
"name_ban": "1.png",
"md5": "1"
},
{
"name_ban": "4.png",
"md5": "2"
},
{
"md5": "11",
"name": "4.png"
}
]
},
"report2": {
"cc": 0,
},
"collectc": 4,
"id": "2",
"comment": {
"wwc": 1,
"cdda": 1,
"creator_threshold": 1,
"stars": [78],
"tips": {
"1": 1,
"total": 1,
"2": 1,
"3": 1,
"4": 1
},
"n": 1,
"dd1n": 3,
},
"init_time": 1,
"_h_": 2,
}],
"urls": ["http:xxxx"] // cdn地址
},
"msg": "ok"
}
- 通过调用接口,获取json数据
String result = getJson(parm);
- 获取json数据中特定的数据,并转换为列表
String data = JSONObject.parseObject(result).getString("data");
- 将json数据转化成列表
List<String> cdnUrlsList = JSON.parseArray(data.getString("urls"), String.class);
- 将data中的数据拼接到urls中,并返回
List<String> cdnUrlsList = JSON.parseArray(data.getString("urls"), String.class);
String cdn = CollectionUtils.isEmpty(cdnUrlsList) ? "" : cdnUrlsList.get(0);
//拼接地图
for (GameMapDetailInfo f : detailInfoList) {
GameSelectDetailInfo detailInfo = f.getSelect();
if (detailInfo == null) {
continue;
}
f.getSelect().setThumbUrl(String.format(cdn, Integer.valueOf(detailInfo.getNode())) + detailInfo.getNode() + "/" + detailInfo.getDir() + "/" + detailInfo.getThumbMd5() + ".png");
}