Java 解析JSON笔记

一、JSON简介
JSON:JavaScript Object Notation,JS对象简谱,是一种轻量级的数据交换格式。

JSON是相比于XML等其他复杂储存格式的一种轻量级的数据格式,可以通用与各个语言平台。常用方法为:交互、解析和储存数据。JSON常用于接口交互、前后端交互,其特点是解析速度快。JSON数据现在是我们开发中用的最多的,百分之九十的数据都是通过JSON方式进行传输,那么想要学好JSON解析就要了解什么是JSON数据,并了解怎么快速解析它,从而提升开发效率。

二、JSON数据格式
什么是JSON数据:

{
	"code":200,
	"charge":false,
	"msg":"查询成功",
	"result":{
		"personList":[
			{
				"name":"xxx",
				"id":12333333,
				"address":"xxx路xxx号"
			},
			{
				"name":"yyy",
				"id":13333333,
				"address":"yyy路yyy号"
			}
		],
	},
	"searchPage":1,
	"maxResult":20,
	"ret_code":0			
}

JSON数据就是一段字符串,只不过有不同意义的分隔符将其分割开。

格式:

  1. { } 一个大括号,表示一个对象。括号中描述对象的属性。通过键值对来描述对象的属性。
  2. 一个中括号,表示数组。数组中可以存放对象,也可以存放值。
  3. :冒号,键值的连接符
  4. ,逗号,多个键值对的分隔符
  5. " " 引号,键值对的,必用引号引起(通常Java解析时,键不使用引号会报错。而JS能正确解析)。
  6. 键值对的,可以是对象、数组、字符串(字符串放到引号中)或数字(数字不需要用引号)。

三、Java与JSON
在Java中,JSON需要做什么?

  • 将Java中的对象快速转换为JSON格式的字符串。
  • 将JSON格式的字符串,转换为Java对象。

四、使用Gson解析JSON数据
Gson是谷歌官方退出的支持JSON与Java Object相互转换的Java序列化/反序列化库。在使用之前需要在项目中导入Gson的jar包(maven工程需要在pom文件中配置依赖)。
1.对象转换为JSON字符串
先创建一个对象类,此处用Book类,类中有id、name和info属性。

import java.util.Objects;

public class Book {
    private String id;
    private String name;
    private String info;

    public Book() {
    }

    public Book(String id, String name, String info) {
        this.id = id;
        this.name = name;
        this.info = info;
    }

    @Override
    public String toString() {
        return "Book{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", info='" + info + '\'' +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Book book = (Book) o;
        return Objects.equals(id, book.id) && Objects.equals(name, book.name) && Objects.equals(info, book.info);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name, info);
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }
}

下面开始使用Gson,将对象转换为JSON字符串。

import com.google.gson.Gson;
import com.unitfore.lessoneight.object.Book;

public class GsonTools {
    public static void main(String[] args) {
        //创建gson对象
        Gson gson = new Gson();
        //创建Book对象
        Book b = new Book("1001","三国演义","桃园三结义");
        //将Book对象转换为Json字符串
        String json = gson.toJson(b);
        System.out.println(json);
    }
}

运行结果:

"D:\Program Files\Java\jdk-11.0.6\bin\java.exe" "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2021.1\lib\idea_rt.jar=65407:D:\Program Files\JetBrains\IntelliJ IDEA 2021.1\bin"
{"id":"1001","name":"三国演义","info":"桃园三结义"}

Process finished with exit code 0

通过创建Gson对象,使用Gson对象中的toJson(对象)方法,将字符串转换为Json字符串。

2.JSON字符串转为对象
依然简单

import com.google.gson.Gson;
import com.unitfore.lessoneight.object.Book;

public class GsonTools {
    public static void main(String[] args) {
        //创建gson对象
        Gson gson = new Gson();
        //创建Book对象
//        Book b = new Book("1001","三国演义","桃园三结义");
        Book book = gson.fromJson("{\"id\":\"1001\",\"name\":\"三国演义\",\"info\":\"桃园三结义\"}",Book.class);
        //将Book对象转换为Json字符串

        System.out.println(book.getId());
        System.out.println(book.getName());
    }
}

运行结果

"D:\Program Files\Java\jdk-11.0.6\bin\java.exe"
1001
三国演义

Process finished with exit code 0

3.JSON字符串转换为HashMap
解析一个复杂字符串:字符串属性中包含数组

{
	"id":"10001",
	"name":"三国演义",
	"info":"桃园三结义",
	"page":["刘关张","猪头","焚香"]
}

解析此Json

import com.google.gson.Gson;
import java.util.HashMap;
import java.util.List;

public class GsonToHashMap {
    public static void main(String[] args) {
        Gson g = new Gson();
        HashMap data = g.fromJson("{\n" +
                "\t\"id\":\"10001\",\n" +
                "\t\"name\":\"三国演义\",\n" +
                "\t\"info\":\"桃园三结义\",\n" +
                "\t\"page\":[\"刘关张\",\"猪头\",\"焚香\"]\n" +
                "}",HashMap.class);
        System.out.println(data.get("name").getClass());
        System.out.println(data.get("page").getClass());
        String name = (String)data.get("name");
        System.out.println(name);
        List page = (List)data.get("page");
        System.out.println(page.get(1));
        System.out.println(page.get(2));
    }
}

在转换为HashMap后,id、name和info属性变成了String字符串,而page属性是一个数组,解析后变成了ArrayList集合。

"D:\Program Files\Java\jdk-11.0.6\bin\java.exe"
class java.lang.String
class java.util.ArrayList
三国演义
猪头
焚香

Process finished with exit code 0

五、使用FastJson解析JSON数据
FastJson是由alibaba工程师基于Java开发的一款JSON解析器和生成器,可用于将Java对象转换为其JSON表示形式。它还可以用于将JSON字符串转换为等效的Java对象。FastJson可以处理任意的Java对象,包括没有源代码的预先存在的对象。

同样的,使用前需要导入相应的jar包。

使用FastJson解析json,比Gson更为简单。下面来看代码:

import com.alibaba.fastjson.JSON;
import com.unitfore.lessoneight.object.Book;
import java.util.HashMap;
import java.util.List;

public class FastJsonDemo {
    public static void main(String[] args) {
        Book book = new Book("1001","水浒传","梁山聚义");
        //对象转换字符串
        String json = JSON.toJSONString(book);
        System.out.println(json);

        //json字符串转换为对象
        Book b = JSON.parseObject(json,Book.class);
        System.out.println(b.getName());

        // json字符串转换为list["1","2","3"]
        List<String> list = JSON.parseArray("[\"哎呀\",\"哦呀\",\"哇呀\"]",String.class);
        System.out.println(list.get(2));

        //json字符串转换成HashMap{"id":"10001","name":"三国演义","info":"桃园三结义","page":["刘关张","猪头","焚香"]}
        HashMap data = JSON.parseObject("{\"id\":\"10001\",\"name\":\"三国演义\",\"info\":\"桃园三结义\",\"page\":[\"刘关张\",\"猪头\",\"焚香\"]}",HashMap.class);
        List page = (List) data.get("page");
        System.out.println(page.get(0));
    }
}

使用FastJson解析,不需要创建响应的对象,直接使用静态方法JSON.toJSONString(对象);转换为json字符串,JSON.parseObject(json字符串,对象.class);转换为对象。

"C:\Program Files\Java\jdk1.8.0_131\bin\java.exe" "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2021.1.1\lib\idea_rt.jar=9220:D:\Program Files\JetBrains\IntelliJ IDEA 2021.1.1\bin" 
{"id":"1001","info":"梁山聚义","name":"水浒传"}
水浒传
哇呀
刘关张

Process finished with exit code 0

六、总结
使用Gson解析

	1. 使用Gson解析,导入jar包,或配置maven依赖
	2. 创建Gson对象,new Gson()
	3. 对象转换字符串: gson.toJson(对象);
	4. json字符转对象: gson.fromJson("json字符串",Object.class);

使用FastJson解析

	1. 导入jar包或配置maven依赖
	2. 对象转换json:JSON.toJSONString(对象);
	3. json字符转换对象:JSON.parseObject("json字符串",Object.class);
	4. json字符串转换list: JSON.parseArray("json字符串",Object.class);

在开发中,根据实际需求进行选择。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值