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
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