您的位置:首页 > Web前端 > JavaScript

JSON解析

2017-03-12 18:32 190 查看
一、JSON简介
1)概念:
JSON的全称是JavaScript Object Notation,是一种轻量级的数据交换格式。
2)特点:
(1)本质就是具有特定格式的字符串
(2)JSON完全独立于编程语言
(3)JSON比XML数据传输的有效性要高出很多。
二、JSON数据格式
1)整体结构
String json1 = "{"id":12,"name":"Tom"}";
String json2 = "[{"id":12,"name":"Tom"},{"id":12,"name":"Tom"}]";
2)Json对象: {}
(1)Json对象的结构: {key1:value1, key2:value2, key3:value3}
(2)key的数据类型: 字符串
(3)value的数据类型:

数值
字符串
null
json数组 []
json对象 {}
3)Json数组 : [ ]
(1)Json数组的结构: [value1, value2, value3]
(2)value的数据类型:

数值
字符串
null
json数组 []
json对象 {}
三、JSON解析技术
1)Android原生技术:(只能解析json没有api生成json)
(1)特点
编程相对麻烦
(2)数据之间转换
(1)将json格式的字符串{}转换为Java对象
API:
JSONObject(String json) : 将json字符串解析为json对象
Xxx getXxx(String name) : 根据name, 在json对象中得到对应的Value
Xxx optXxx(String name) : 根据name, 在json对象中得到对应的Value
注意:optXxx方法会在对应的key中的值不存在的时候返回一个空字符串或者返回

你指定的默认值,但是getString方法会出现空指针异常的错误。

eg: try {

JSONObject jsonObject = new JSONObject(jsonStr);

if (jsonObject != null) {

int id = jsonObject.optInt("id");

String name = jsonObject.optString("name");

double price = jsonObject.optDouble("price");

String imagePath = jsonObject.optString("imagePath");

user = new User(id, name, price, imagePath);

}

} catch (JSONException e) {

e.printStackTrace();

}
(2)将json格式的字符串[]转换为Java对象的List
API:
JSONArray(String json) : 将json字符串解析为json数组
int length() : 得到json数组中元素的个数
Xxx getXxx(int index) : 根据下标得到json数组中对应的元素数据
Xxx optXxx(int index) : 根据下标得到json数组中对应的元素数据
注意:
optXxx方法会在对应的key中的值不存在的时候返回一个空字符串或者返回

你指定的默认值,但是getString方法会出现空指针异常的错误。

eg: try {

JSONArray jsonArray = new JSONArray(jsonStr);

if (jsonArray != null && jsonArray.length() > 0) {

for (int i = 0; i < jsonArray.length(); i++) {

JSONObject jsonObject = jsonArray.getJSONObject(i);

if (jsonObject != null) {

int id = jsonObject.optInt("id");

String name = jsonObject.optString("name");

double price = jsonObject.optDouble("price");

String imagePath = jsonObject.optString("imagePath");

user = new User(id, name, price, imagePath);

userList.add(user);

}

}

}

} catch (JSONException e) {

e.printStackTrace();

}

2)Gson框架技术
(1)特点:
编码简洁,谷歌官方推荐
(2)下载地址:
https://mvnrepository.com/artifact/com.google.code.gson/gson
(3)数据之间转换
(1)将json字符串转换为JavaObject
API: gson.fromJson(String json, Class<T> classOfT);
注意:
要求json对象中的key的名称与java对象对应的类中的属性名要相同
步骤
1)添加依赖compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0'
2)创建Gson对象 :

Gson gson = new Gson();
3)通过创建的Gson对象调用fromJson()方法,返回该JSON数据对应的Java对象

Person person = gson.fromJson(jsonStr, Person.class);
(2)将json字符串转换为JavaList
API: gson.fromJson(String json, Type typeOfT);
步骤
1)添加依赖compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0'
2)创建Gson对象 :

Gson gson = new Gson();
3)通过创建的Gson对象调用fromJson()方法,返回该JSON数据对应的Java集合
List<Person> personList=gson.fromJson(jsonStr,new TypeToken<List<Person>>(){}.getType());
(3)将JavaObject转换为json字符串
API: gson.toJson(Object src);
步骤
1)添加依赖compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0'
2)创建Gson对象 :

Gson gson = new Gson();
3)通过创建的Gson对象调用toJson()方法,返回json数据:

Person person=new Person("刘涛","女",28);

String jsonStr = gson.toJson(person);
(4)将JavaList转换为json字符串
API: gson.toJson(Object src);
步骤
1)添加依赖compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0'
2)创建Gson对象 :

Gson gson = new Gson();
3)通过创建的Gson对象调用toJson()方法,返回json数据:

String jsonStr = gson.toJson(personList);
3)FastJson框架技术
(1)特点:
Fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹。

配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库
(2)下载地址:(android版)
https://github.com/alibaba/fastjson/wiki/Android%E7%89%88%E6%9C%AC
(3)数据之间转换
(1)将json字符串转换为JavaObject
API: JSON.parseObject(String json, Class<T> classOfT);
步骤:
1)添加依赖 compile 'com.alibaba:fastjson:1.1.56.android'
2)JSON调用parseObject()方法,获取转换后的Java对象

例如: Person person = JSON.parseObject(jsonStr,Person.class);
(2)将json字符串转换为JavaList
API: JSONArray.parseArray(String json,Class<T> classOfT);
步骤:
1)添加依赖 compile 'com.alibaba:fastjson:1.1.56.android'
2)JSON调用parseArray()方法,获取转换后的Java集合

例如: List<Person> personList= JSONArray.parseArray(jsonStr,Person.class);
(3)将JavaObject转换为json字符串
API: JSON.toJSONString(Object object);
步骤:
1)添加依赖 compile 'com.alibaba:fastjson:1.1.56.android'
2)JSON调用toJSONString()方法,获取转换后的json数据

例如:

Person person=new Person("刘涛","女",28);
String jsonStr = JSON.toJSONString(person);

(4)将JavaList转换为json字符串

API: JSON.toJSONString(Object object);

步骤:

1)添加依赖 compile 'com.alibaba:fastjson:1.1.56.android'

2)JSON调用toJSONString()方法,获取转换后的json数据

例如:

String jsonStr = JSON.toJSONString(personList);
源码地址:http://download.csdn.net/detail/daidaishuiping/9778683
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JSON Gson FastJson