JSON解析
- JSON解析
- 对象格式
- java
- js
- XML
- JSON
- Java与JSON
- GSON
- 将对象转换为JSON字符串
- 将JSON字符串转换为对象
- FastJson
- 将对象转换为JSON字符串
- 将JSON字符串转换为对象
JSON解析
JSON: JavaScript Object Notation
JSON是JS对象简谱,是一种轻量级的数据交换格式
欧洲计算机协会制定的JS规范的子集,完全独立于编程语言,用文本来表示数据
对象格式
用 java、js、XML、JSON描述上述内容:
一本书
书名
简介
java
class Book{
private String name;
private String info;
get/set...
}
Book b = new Book();
b.setName("Java核心技术");
b.setInfo("讲述了Java核心技术的有关内容");
...
js
可以不用写类,直接创建对象
直接用对象.属性名的方式来创建对象的属性
var b = new Object();
b.name = "Java核心技术";
b.info = "讲述了Java核心技术的有关内容" ;
XML
<book>
<name>Java核心技术</name>
<info>讲述了Java核心技术的有关内容</info>
</book>
JSON
JS中name和info的引号可以省略,可以是单的也可以是双的,与Java程序员交互时name和info加引号
{
"name":"Java核心技术",
"info":"讲述了Java核心技术的有关内容"
}
一对大括号表示一个对象,大括号中包含了一个个键值对
通过键值对来描述对象的属性,属性名与属性值之间用冒号隔开: 属性名:属性值
键值对的键应使用引号引住 (JS能正确解析,但是通常Java解析时,键不使用引号会报错)
键值对的值可以是JS中的任意类型的数据
多个属性之间用逗号隔开
在JSON格式中可以与对象互相嵌套:[元素1,元素2…]
Java与JSON
将Java中的对象快速的转换为JSON格式的字符串
将JSON格式的字符串,转换为Java的对象
GSON
来自谷歌
将对象转换为JSON字符串
步骤
- 引入JAR包
- 在需要转换JSON字符串的位置编写如下代码:
String json = new Gson().toJSON(要转换的对象);
代码示例:
public static void main(String[] args) {
//1.创建Gson对象
Gson g = new Gson();
//2.转换
Book book = new Book(100,"Java核心技术","讲述了Java核心技术的有关内容");
String s = g.toJson(book);//传入对象转换为相应的Json对象
System.out.println(s);
}
执行结果:
{"id":100,"name":"Java核心技术","info":"讲述了Java核心技术的有关内容"}
将JSON字符串转换为对象
步骤
- 引入JAR包
- 在需要转换Java对象的位置编写如下代码:
对象 = new Gson().fromJson(JSON字符串,对象类型.class);
代码示例1(转回对象):
public static void main(String[] args) {
//1.创建Gson对象
Gson g = new Gson();
//2.转换 {"id":100,"name":"Java核心技术","info":"讲述了Java核心技术的有关内容"}
Book book = g.fromJson("{\"id\":100,\"name\":\"Java核心技术\",\"info\":\"讲述了Java核心技术的有关内容\"}", Book.class);
System.out.println(book.getId());
System.out.println(book.getName());
System.out.println(book.getInfo());
}
执行结果:
100
Java核心技术
讲述了Java核心技术的有关内容
代码示例2(转回集合):
public static void main(String[] args) {
//1.创建Gson对象
Gson g = new Gson();
//2.转换 {"id":100,"name":"Java核心技术","info":"讲述了Java核心技术的有关内容","page":["封装","继承","多态"]}
HashMap data = g.fromJson("{\"id\":100,\"name\":\"Java核心技术\",\"info\":\"讲述了Java核心技术的有关内容\",\"page\":[\"封装\",\"继承\",\"多态\"]}", HashMap.class);
System.out.println(data.get("id"));
System.out.println(data.get("name"));
System.out.println(data.get("info"));
System.out.println(data.get("page"));
System.out.println(data.get("page").getClass());
List page = (List)data.get("page");
System.out.println(page.get(1));
}
执行结果:
对象中的数组部分在转换过程中会转换成ArrayList
100.0
Java核心技术
讲述了Java核心技术的有关内容
[封装, 继承, 多态]
class java.util.ArrayList
继承
FastJson
来自阿里
将对象转换为JSON字符串
步骤
- 引入JAR包
- 在需要转换JSON字符串的位置编写如下代码即可:
String json=JSON.toJSONString(要转换的对象);
代码示例:
public static void main(String[] args) {
Book book = new Book(100,"Java核心技术","讲述了Java核心技术的有关内容");
//1.转换
String s = JSON.toJSONString(book);
System.out.println(s);
}
执行结果:
{"id":100,"info":"讲述了Java核心技术的有关内容","name":"Java核心技术"}
将JSON字符串转换为对象
步骤
- 引入JAR包
- 在需要转换Java对象的位置, 编写如下代码:
类型 对象名=JSON.parseObject(JSON字符串, 类型.class);
或
List<类型> list=JSON.parseArray(JSON字符串,类型.class);
代码示例1(转回对象):
public static void main(String[] args) {
//1.转换 {"id":100,"info":"讲述了Java核心技术的有关内容","name":"Java核心技术"}
Book book = JSON.parseObject("{\"id\":100,\"info\":\"讲述了Java核心技术的有关内容\",\"name\":\"Java核心技术\"}", Book.class);
System.out.println(book.getId());
System.out.println(book.getName());
System.out.println(book.getInfo());
}
执行结果:
100
Java核心技术
讲述了Java核心技术的有关内容
代码示例2(转回集合):
public static void main(String[] args) {
//1.转换 ["封装","继承","多态"]
List<String> strings = JSON.parseArray("[\"封装\",\"继承\",\"多态\"]", String.class);
System.out.println(strings.get(1));
}
执行结果:
继承