一. 简介:
JSON: JavaScript Object Notation JS对象简谱,是一种轻量级的数据交换格式。
二. 对象格式
一本书
书名
简介
java
class Book{
private String name;
private String info;
get/set...
}
Book b = new Book();
b.setName(“金苹果”);
b.setInfo(“种苹果”);
...
js
var b = new Object();
b.name = "金苹果";
b.info = "种苹果";
XML
<book>
<name>金苹果</name>
<info>种苹果</info>
</book>
JSON
{
"name":"金苹果",
"info":"种苹果"
}
一个对象,由一个大括号表示。
括号中 描述对象的属性通过键值对来描述对象的属性。
(可以理解为,大括号中,包含的是一个个的键值对)
格式:
键与值之间使用冒号连接,多个键值对之间使用逗号分隔。
键值对的键应使用引号引住(通常Java解析时,键不使用引号会报错,而JS能正确解析)。
键值对的值,可以是JS中的任意类型的数据。
三. 数组格式
在JSON格式中可以与对象互相嵌套
[元素1,元素2...]
四. Java与JSON
将Java中的对象快速的转换为 JSON格式的字符串。
将JSON格式的字符串,转换为Java的对象
1. Gson
1.1 将对象转换为JSON字符串
转换JSON字符串的步骤:
(1)引入JAR包
(2)在需要转换JSON字符串的位置编写如下代码即可:
String json = new Gson().toJSON(要转换的对象);
例子:
Gson g = new Gson();
Book b = new Book("1001","金苹果","种植苹果真辛苦");
String s = g.toJson(b);
System.out.println(s);
1.2 将JSON字符串转换为对象
(1)引入JAR包
(2)在需要转换Java对象的位置, 编写如下代码:
对象 = new Gson().fromJson(JSON字符串,对象类型.class);
例子:
Gson g = new Gson();
Book b = g.fromJson("{\"id\":\"1001\",\"name\":\"金苹果\",\"info\":\"种植苹果真辛苦\"}",Book.class);
System.out.println(b);
JSON字符串含有数组
Gson g = new Gson();
HashMap map = g.fromJson("{\"id\":\"1001\",\"name\":\"金苹果\",\"info\":\"种植苹果真辛苦\",\"data\":[\"一二三\",\"二三四\",\"三四五\"]}",HashMap.class);
此时JSON字符串里的数组被转换成了list集合,即上面的data对应的数据是list集合的数据
List<String> d = (List<String>) map.get(data);
System.out.println(d.get(0));
2. FastJson
2.1 将对象转换为JSON字符串
转换JSON字符串的步骤:
(1)引入JAR包
(2)在需要转换JSON字符串的位置编写如下代码即可:
String json=JSON.toJSONString(要转换的对象);
例子:
Book book = new Book("1002","唐诗三百首","床前明月光");
String s = JSON.toJSONString(book);
System.out.println(s);
2.2 将JSON字符串转换为对象
(1)引入JAR包
(2)在需要转换Java对象的位置, 编写如下代码:
类型 对象名=JSON.parseObject(JSON字符串, 类型.class);
或
List<类型> list=JSON.parseArray(JSON字符串,类型.class);
例子:
Book book = JSON.parseObject("{\"id\":\"1002\",\"info\":\"床前明月光\",\"name\":\"唐诗三百首\"}",Book.class);
System.out.println(book.getId());
list集合的转换
List<String> strings = JSON.parseArray("[\"一二三\",\"二三四\",\"三四五\"]",String.class);
System.out.println(strings);
3. Gson和FastJson的选择
FastJson相对Gson来说比较方便,但如果出于安全考虑则建议用Gson