详细JSON解析教程

 更新时间:2023年08月08日 11:07:58   作者:周里奥  
JSON即JS对象简谱 , 是一种轻量级的数据交换格式,Java官方没有提供JSON解析相应的API,本文提供两个最常用的JSON解析方法,分别是Google的Gson,阿里的FastJson,使用JSON解析之前要先获取相应的jar包,感兴趣的朋友一起看看吧
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

1. 了解JSON

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

进一步理解:

  • JSON和JavaScript的关系:两者之间的关系就是雷锋和雷锋塔的关系,两者之间没有什么关系;
  • 数据交换格式:实现客户端与服务器之间的数据交换,当时通用的数据交换语言是XML,但是Douglas crockford觉得xml的生成和解析都太麻烦,所以他提出了一种简化格式,也就是json;(更具体见4.JSON解析)
  • 轻量级是对比而言的,JSON 简单的语法格式和清晰的层次结构明显要比 XML 容易阅读,并且在数据交换方面,由于 JSON 所使用的字符要比 XML 少得多,可以大大得节约传输数据所占用得带宽。

2.JSON对象格式

试着用不同的语言描述一本书(对象):书名+内容,能够看出JSON在轻量级这块的优势

Java

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方法...
}

JavaScript

var b = new Object();
	b.name = "金苹果"; 
	b.info = "种苹果好辛苦";

XML

<book>
	<name>金苹果</name>
	<info>种苹果好辛苦</info> 
</book>

JSON

{ 
	"name":"金苹果",
 	"info":"种苹果好辛苦" 
}

3.JSON语法格式(建议结合案例对比着看)

  • 一个对象由一个大括号表示,大括号中通过键值对来描述对象的属性 (可以理解为,大括号中,包含的是一个个的键值对);
  • 键与值之间使用冒号连接,多个键值对之间使用逗号分隔;
  • 键值对的键应使用引号引住 (通常Java解析时,键不使用引号会报错。而JS能正确解析);
  • 键值对的值, 可以是JS中的任意类型的数据;
  • 数组格式:[元素1,元素2…];
  • 在JSON格式中可以互相嵌套,比如对象1里出现数组1,数组1里又出现对象2。

案例

{
	"name":"种水果",
	"info":"种水果好辛苦",
	"fruit":["苹果","香蕉",{
				"name":"西瓜",
				"info":"无籽西瓜"
			}],
	"haha":{
		"name":"大长刀",
		"length":"40cm"
	}
}

4.JSON解析

Java用JSON做什么?上面也说过了,用来实现数据交换。我们知道JSON存的数据类型是字符串,并且这个字符串由一个个键值对组成,像极了Java对象里属性和值的关系。我们想能不能通过某种办法把JSON字符串变成Java相应的对象、实现对数据方便地操作呢?或者我们想把Java对象的信息变成JSON字符串展示给别人看呢?下面引入JSON解析的概念。

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

Java官方没有提供JSON解析相应的API,本文提供两个最常用的JSON解析方法,分别是Google的Gson,阿里的FastJson,使用JSON解析之前要先获取相应的jar包。

Gson解析

  • 将对象转换为JSON字符串,步骤:

引入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}

将JSON字符串转换为对象,步骤:

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解析

  • 将对象转换为JSON字符串,步骤:

引入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}

将JSON字符串转换为对象,步骤:

引入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"));   //无籽西瓜

运行结果

的的的的

总结

  • JSON解析无非就两种情况:序列化和反序列化,序列化简单一些,反序列化注意一下对象的类型;
  • 最外层对这里的字符串加了"[]",初试为数组;
  • toJSONString()方法,实现数组向字符串的转化;
  • 建议动手敲一下代码,体会更深一些。

参考资料

1.JSON基本使用

2.FastJson的简单使用

到此这篇关于详细Java JSON解析教程的文章就介绍到这了,更多相关json解析内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!

相关文章

  • 关于idea+centos7+zookeeper报错connectionloss,timeout问题

    关于idea+centos7+zookeeper报错connectionloss,timeout问题

    这篇文章主要介绍了idea+centos7+zookeeper报错connectionloss,timeout问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Git常用命令的使用

    Git常用命令的使用

    本文主要介绍了Git常用命令的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • 配置Git并从GitHub上克隆项目

    配置Git并从GitHub上克隆项目

    这篇文章介绍了配置Git并从GitHub上克隆项目的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • Git在项目协作开发中所解决问题

    Git在项目协作开发中所解决问题

    这篇文章主要为大家介绍了Git在项目协作开发中所解决问题,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • Git的基础文件操作初始化查看添加提交示例教程

    Git的基础文件操作初始化查看添加提交示例教程

    这篇文章主要为大家介绍了Git的基础文件操作初始化查看添加提交示例教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • Git撤销&回滚操作(git reset 和 get revert)

    Git撤销&回滚操作(git reset 和 get revert)

    这篇文章主要介绍了Git撤销&回滚操作(git reset 和 get revert),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • VsCode运行html界面的实战步骤

    VsCode运行html界面的实战步骤

    在VSCode中默认编写的HTML页面是不能运行的,下面这篇文章主要给大家介绍了关于VsCode运行html界面的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • 使用 FFmpeg 命令拼接mp3音频文件异常问题及解决方法

    使用 FFmpeg 命令拼接mp3音频文件异常问题及解决方法

    这篇文章主要介绍了使用 FFmpeg 命令拼接mp3音频文件异常问题及解决方法,本文给大家介绍的非常详细,对大家的工作或学习具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • Spark在Windows下的环境搭建方法

    Spark在Windows下的环境搭建方法

    这篇文章主要介绍了Spark在Windows下的环境搭建方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • 深入剖析网关gateway原理

    深入剖析网关gateway原理

    这篇文章主要介绍了网关gateway,本文从网关的背景开始讲起,一次论述网关的依赖,负载均衡,网关的选型等等进行深入的剖细,让大家可以更深一步的了解
    2021-08-08

最新评论

?


http://www.vxiaotou.com