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字符串

步骤

  1. 引入JAR包
  2. 在需要转换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字符串转换为对象

步骤

  1. 引入JAR包
  2. 在需要转换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字符串

步骤

  1. 引入JAR包
  2. 在需要转换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字符串转换为对象

步骤

  1. 引入JAR包
  2. 在需要转换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));
}

执行结果:

继承