一、JSON
JSON:JavaScript Object Notation,是一种轻量级的数据交换格式。
对象格式:
一本书:
书名
简介
java:
class Book{
private String name;
private String info;
......
}
Book book = new Book();
book.setName("xxx");
book.setInfo("xxx");
js:
var book = new Object();
book.name = "xxx";
book.info="xxx";
XML:
<book>
<name>xxx</name>
<info>xxx</info>
</book>
JSON:
{
"name": "xxx",
"info":"xxx"
}
对象:{ }
键值对:"键":"值" 多个键值对用逗号分隔
数组:"键":[ ] 多个数组用逗号分隔
二、Gson
谷歌的,使用Gson需要引入gson的jar包。
1、将对象转换为JSON字符串
String json = new Gson().toJson(要转换的对象);
2、将JSON字符串转换为对象
对象 = new Gson().fromJson(JSON字符串,对象类型.class);
三、FastJson
阿里的,使用FastJson需要引入fastJson的jar包。
1、将对象转换为JSON字符串
String json = JSON.toJSONString(要转换的对象);
2、将JSON字符串转换为对象
对象 = JSON.parseObject(JSON字符串,对象类型.class);
四、案例
1、JSON数据
{
'desc': 'OK',
'status': 1000,
'data': {
'wendu': '20',
'ganmao': '相对于今天将会出现大幅度降温,易发生感冒,请注意适当增加衣服,加强自我防护避免感冒。',
'forecast': [{
'fengxiang': '北风',
'fengli': '3-4级',
'high': '高温 27℃',
'type': '中雨',
'low': '低温 19℃',
'date': '6日星期五'
}, {
'fengxiang': '北风',
'fengli': '微风级',
'high': '高温 23℃',
'type': '大雨',
'low': '低温 17℃',
'date': '7日星期六'
}, {
'fengxiang': '北风',
'fengli': '微风级',
'high': '高温 26℃',
'type': '小雨',
'low': '低温 17℃',
'date': '8日星期天'
}, {
'fengxiang': '南风',
'fengli': '微风级',
'high': '高温 27℃',
'type': '多云',
'low': '低温 15℃',
'date': '9日星期一'
}, {
'fengxiang': '南风',
'fengli': '微风级',
'high': '高温 29℃',
'type': '多云',
'low': '低温 16℃',
'date': '10日星期二'
}],
'yesterday': {
'fl': '微风',
'fx': '北风',
'high': '高温 33℃',
'type': '阴',
'low': '低温 22℃',
'date': '5日星期四'
},
'aqi': '58',
'city': '成都'
}
}
2、对应实体类
根据JSON数据,创建对应实体类。
以下实体类省略getter/setter方法、toString方法和构造方法。
public class Weather {
private String desc;
private int status;
private Data data;
}
public class Data {
private String wendu;
private String ganmao;
private List<Forecast> forecast;
private Yesterday yesterday;
private String aqi;
private String city;
}
public class Forecast {
private String fengxiang;
private String fengli;
private String high;
private String type;
private String low;
private String date;
}
public class Yesterday {
private String fl;
private String fx;
private String high;
private String type;
private String low;
private String date;
}
3、测试类
public class Test1 {
public static void main(String[] args) {
//要解析的字符串
String json = "{ 'desc': 'OK', 'status': 1000, 'data': { 'wendu': '20', 'ganmao': '相对于今天将会出现大幅度降温,易发生感冒,请注意适当增加衣服,加强自我防护避免感冒。', 'forecast': [ { 'fengxiang': '北风', 'fengli': '3-4级', 'high': '高温 27℃', 'type': '中雨', 'low': '低温 19℃', 'date': '6日星期五' }, { 'fengxiang': '北风', 'fengli': '微风级', 'high': '高温 23℃', 'type': '大雨', 'low': '低温 17℃', 'date': '7日星期六' }, { 'fengxiang': '北风', 'fengli': '微风级', 'high': '高温 26℃', 'type': '小雨', 'low': '低温 17℃', 'date': '8日星期天' }, { 'fengxiang': '南风', 'fengli': '微风级', 'high': '高温 27℃', 'type': '多云', 'low': '低温 15℃', 'date': '9日星期一' }, { 'fengxiang': '南风', 'fengli': '微风级', 'high': '高温 29℃', 'type': '多云', 'low': '低温 16℃', 'date': '10日星期二' } ], 'yesterday': { 'fl': '微风', 'fx': '北风', 'high': '高温 33℃', 'type': '阴', 'low': '低温 22℃', 'date': '5日星期四' }, 'aqi': '58', 'city': '成都' } }";
gson(json);
fastjson(json);
}
//使用谷歌的Gson
public static void gson(String json) {
Weather weather = new Gson().fromJson(json, Weather.class);
System.out.println(weather);
}
//使用阿里的FastJson
public static void fastjson(String json) {
Weather weather = JSON.parseObject(json, Weather.class);
System.out.println(weather);
}
}