赞
踩
简介:JSON(JavaScript Object Notation),即JS对象简谱 , 是一种轻量级的数据交换格式。
进一步理解:
试着用不同的语言描述一本书(对象):书名+内容,能够看出JSON在轻量级这块的优势
Public class Test {
public static void main() {
Book b = new Book();
b.setName(“金苹果”);
b.setInfo(“种苹果好辛苦”);
}
}
class Book {
private String name;
private String info;
构造方法;
get/set方法...
}
var b = new Object();
b.name = "金苹果";
b.info = "种苹果好辛苦";
<book>
<name>金苹果</name>
<info>种苹果好辛苦</info>
</book>
{
"name":"金苹果",
"info":"种苹果好辛苦"
}
案例
{
"name":"种水果",
"info":"种水果好辛苦",
"fruit":["苹果","香蕉",{
"name":"西瓜",
"info":"无籽西瓜"
}],
"haha":{
"name":"大长刀",
"length":"40cm"
}
}
Java用JSON做什么?上面也说过了,用来实现数据交换。我们知道JSON存的数据类型是字符串,并且这个字符串由一个个键值对组成,像极了Java对象里属性和值的关系。我们想能不能通过某种办法把JSON字符串变成Java相应的对象、实现对数据方便地操作呢?或者我们想把Java对象的信息变成JSON字符串展示给别人看呢?下面引入JSON解析的概念。
Java官方没有提供JSON解析相应的API,本文提供两个最常用的JSON解析方法,分别是Google的Gson,阿里的FastJson,使用JSON解析之前要先获取相应的jar包。
Gson解析
- 引入jar包
- 在需要转换JSON字符串的位置编写如下代码即可: String json = new Gson().toJSON(要转换的对象);
案例
Book b = new Book("金苹果","讲述了种植苹果的心酸历程",20,100);
String json = new Gson().toJson(b);
System.out.println(json);
输出结果
{"name":"金苹果","info":"讲述了种植苹果的心酸历程","prize":20,"page":100}
1.引入jar包
2.在需要转换Java对象的位置, 编写如下代码: 类型 对象 = new Gson().fromJson(JSON字符串,对象类型.class);
案例1
String json1 = "{\"name\":\"金苹果\",\"info\":\"讲述了种植苹果的心酸历程\",\"prize\":10,\"page\":100}";
Book b1 = new Gson().fromJson(json,Book.class);
System.out.println(b1.getPrize());
输出结果
10
案例2
注意:字符串最外层有花括号’{}’,英文引号前有转义字符\
// 如果字符串信息和对象信息不匹配 ,则字符串转hashmap对象,因为hashmap类型也是按键值对存储。
String json2 = "{\"name\":\"金苹果\",\"info\":\"讲述了种植苹果的心酸历程\",\"prize\":20,\"page\":100,\"content\":[\"锄禾日当午\",\"汗滴禾下土\",\"呵呵呵呵呵\"]}";
HashMap map = new Gson().fromJson(json2,HashMap.class);
System.out.println(map.get("content"));
// 这里说明一下,如果字符串里有数组,转HashMap后,数组按List存储(动手试一下)
ArrayList list = (ArrayList) map.get("content");
System.out.println(list.get(0));
输出结果
[锄禾日当午,汗滴禾下土,呵呵呵呵呵]
锄禾日当午
FastJson解析
- 引入jar包
- 在需要转换JSON字符串的位置编写如下代码即可: String json=JSON.toJSONString(要转换的对象);
案例
Book b = new Book("金苹果","讲述了种植苹果的心酸历程",20,100);
String fastJson = JSON.toJSONString(b);
System.out.println(fastJson);
输出结果
{"info":"讲述了种植苹果的心酸历程","name":"金苹果","page":100,"prize":20}
- 引入jar包
- 在需要转换Java对象的位置, 编写如下代码: 类型 对象名=JSON.parseObject(JSON字符串, 类型.class); 或 List<类型> list=JSON.parseArray(JSON字符串,类型.class);
案例1
Book b1 = JSON.parseObject("{\"name\":\"金苹果\",\"info\":\"讲述了种植苹果的心酸历程\",\"prize\":20,\"page\":100}",Book.class);
System.out.println(b1);
运行结果
Book{name='金苹果', info='讲述了种植苹果的心酸历程', prize=20, page=100}
案例2:数组转为list集合
List<String> list = JSON.parseArray("[\"锄禾日当午\",\"汗滴禾下土\",\"呵呵呵呵呵\"]",String.class);
System.out.println(list.get(1));
运行结果
汗滴禾下土
案例3:解析一段稍微复杂的JSON案例
{
"name":"种水果",
"info":"种水果好辛苦",
"fruit":["苹果","香蕉",{
"name":"西瓜",
"info":"无籽西瓜"
}],
"haha":{
"name":"大长刀",
"length":"40cm"
}
}
代码
String json = "[{ "name":"种水果", "info":"种水果好辛苦", "fruit":["苹果","香蕉",{ "name":"西瓜", "info":"无籽西瓜" }], "haha":{ "name":"大长刀", "length":"40cm" } }]"; //1. 最外层是数组格式,这里数组只包含一个元素 List<Map> list = JSON.parseArray(json,Map.class); Map map = list.get(0); String info = (String) map.get("info"); System.out.println(info); //种水果好辛苦 //2. 键fruit对应的值类型是数组,用到方法toJSONString()将数组转成字符串格式,再进行解析 String fruit = JSON.toJSONString(map.get("fruit")); List<String> list1 = JSON.parseArray(fruit,String.class); System.out.println(list1.get(0)); //苹果 // 字符串转对象 Map map1 = JSON.parseObject(list1.get(2),Map.class); System.out.println(map1.get("info")); //无籽西瓜
运行结果
总结
1.JSON基本使用
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。