一、JSON简介
JSON(JavaScript Object Notation, JS 对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的 js 规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
(以上内容来源于百度)
二、JSON格式与查看
通过百度百科我们可以了解 JSON 是干啥的,但是光看这个东西就有点抽象,我们来上点实在的。
Person p = new Person();
p.setName("张大爷");
p.setAge(65);
p.setFriend("马冬梅");
这是在 Java 我们搞一个对象的格式。想必大家都非常习惯,不但看习惯更是用习惯了。
但是在 js 中不这么搞:
var b = new Object();
b.name = "张大爷";
b.age = 65;
b.friend = "马冬梅";
那我为啥要说 js 呢?那毕竟咱要说的 JSON 是人家的东西,介绍还是要介绍的。好了言归正传,JSON 存储数据的格式来了!
{
"name" : "张大爷",
"age" : "65",
"friend" : "马冬梅"
}
这就是JSON存储数据的格式啦!其实在 js 里面,属性名称是不用加上引号的,但是我们是 Java 程序员,Java 解析的时候,如果没有引号会出问题,所以你懂的。当然了,还有一些更复杂的用法,但是你得先了解基础的。
一个对象, 由一个大括号表示.
括号中描述对象的属性 . 通过键值对来描述对象的属性
(可以理解为, 大括号中, 包含的是一个个的键值对.)
格式:
键与值之间使用冒号连接,多个键值对之间使用逗号分隔.。
键值对的键应使用引号引住 (通常Java解析时,键不使用引号会报错, 而JS能正确解析。)
键值对的值,可以是JS中的任意类型的数据。
JSON 中键值对中值可以是数组,也可以是又一个对象。不过这里需要注意,Java 中数组是用{}来表示数组,但是 JS 用的是 [元素1, 元素2,元素3……元素n] 这样的格式。现在,让我们来看看 JSON 的更复杂些的格式吧!
{
"name":"张大爷",
"age":65,
"friend":["张三","李四","王二","麻子",{
"name":"马冬梅",
"info":"正在寻找老公的路上" }],
"hehe":{
"name":"大长刀",
"length":"40m"
}
}
可以看到,我们在 friend 值上弄了个数组,然后最后一个元素又嵌套了一个对象。当然了,我们还可以这样一直无限嵌套下去。但是这将会让我们阅读起来有些困难。给大家看个栗子。
{
"error_code": 0,
"reason": "Success",
"result": {
"data": [
{
"content": "有一天晚上我俩一起吃西瓜,老大把西瓜籽很整洁的吐在了一张纸上,\r\n过了几天,我从教室回但宿舍看到老大在磕瓜子,\r\n我就问他:老大,你什么时候买的瓜子?\r\n老大说:刚晒好,说着抓了一把要递给我……",
"hashId": "bcc5fdc2fb6efc6db33fa242474f108a",
"unixtime": 1418814837,
"updatetime": "2014-12-17 19:13:57"
},
{
"content": ""我女朋友气跑了"\r\n"怎么回事?严重吗?你怎么着她了?"\r\n"不严重,我只是很久没用了"",
"hashId": "03a6095c18e1d6fe7e2c19b2a20d03d1",
"unixtime": 1418814837,
"updatetime": "2014-12-17 19:13:57"
},
{
"content": "还说神马来一场说走就走的旅行,\r\n工作后就连一场说走就走的下班都不行。",
"hashId": "10edf75c1e7d0933c91f0f39a28a2c84",
"unixtime": 1418814837,
"updatetime": "2014-12-17 19:13:57"
},
{
"content": "高速路上堵车,路边葡萄地里有一哥们竟然在偷葡萄,心想太没素质了吧!\r\n不管了我也去,刚溜进葡萄地,那哥们竟问我干嘛,\r\n我撇了一眼反问道你干嘛呢?\r\n那哥们答道摘葡萄呢!\r\n我答道:我也摘葡萄呢!\r\n哥们郁闷了说我摘我家的你呢?\r\n我顿时脸红,哥你家葡萄咋卖呢?",
"hashId": "bb572bb5b4844badb31012983f7324f5",
"unixtime": 1418814837,
"updatetime": "2014-12-17 19:13:57"
},
{
"content": "和老婆在街边散步,我手上捏着一张已揉成一团的传单,\r\n走了好一会终于看到个垃圾桶,我赶紧跑过去想扔掉,\r\n没想到老婆从后边一把拉住我说:老公,那个肯定吃不得了,别捡。\r\n我一愣,发现垃圾桶顶盖上放着半个西瓜。",
"hashId": "7ebccd3bbfaf24e010f9eb3ee68234bd",
"unixtime": 1418814837,
"updatetime": "2014-12-17 19:13:57"
},
{
"content": "某考生考了个倒数第一,回到家被他爸一顿暴揍,\r\n来到学校老师让他谈谈落后的体会,\r\n学生:“我终于明白了“落后就要挨打”的道理。”",
"hashId": "4aee2aa6a79c67682f605c4146a8eca4",
"unixtime": 1418814837,
"updatetime": "2014-12-17 19:13:57"
},
{
"content": "很多人不喜欢朝九晚五的生活,然后开始创业。\r\n最终,他的生活变成了朝五晚九。",
"hashId": "7b358c4b96cf4a8d82b85545ea8f9603",
"unixtime": 1418814837,
"updatetime": "2014-12-17 19:13:57"
},
{
"content": "钱这个东西,真是害人精。\r\n小到人与人之间的矛盾,大到国家之间的战争,无不是为了钱。\r\n钱可以把人推上万众瞩目之颠,也可以使人瞬间变成阶下囚。\r\n可是,富人们却没认识到,当钱几辈子花不完时,\r\n挣再多已经没有意义,还不如早日尽点社会责任,\r\n捐助给需要的人,求得个平安幸福。\r\n看到这个的有钱人们呐,你们什么时侯能捐我点啊!",
"hashId": "94e18075f8c9c8211dfed5f8d6a62983",
"unixtime": 1418814837,
"updatetime": "2014-12-17 19:13:57"
},
{
"content": "看到一句很好的名言:我们无法拉伸生命的长度,但是我们可以拓展生命的宽度。\r\n我觉得这句话太有道理了!\r\n意思就是:虽然我们无法再长高了,但是我们还可以继续长胖。",
"hashId": "fd8e364a4c70d46e77c1610879748a9a",
"unixtime": 1418814837,
"updatetime": "2014-12-17 19:13:57"
},
{
"content": "女生口中所说的“理工男好萌好棒好想嫁!”,\r\n其实理工男是指“会修电脑、会设置手机、会安家用电器、\r\n会帮做PPT打EXCEL表PS修图、话少、高冷、专一、不和乱七八糟的女生来往、\r\n不爱打扮却又干净清爽、高高瘦瘦、手指纤长、戴黑框眼镜超好看的帅哥”。\r\n其实找个帅哥让他学电脑,再戴个眼镜就OK了。",
"hashId": "5001c08a3cc8a281b15c467bc15a4911",
"unixtime": 1418814837,
"updatetime": "2014-12-17 19:13:57"
}
]
}
}
如你所见,当 JSON 的文本长度一起来,层级关系就没这么清晰了。这时我们可以借助 JSON 在线工具来解析他!JSON←这是我用的视图工具,给大家看看效果。
复制粘贴,
然后点击视图
双击图中的 JSON元素就呈现出来了,接下就是想看哪个双击哪个。
到这里,似乎这些都和我们的 Java 没啥关系,别慌,我这就来讲。
三、Java中使用JSON
使用 JSON 我们需要为项目导入一个 jar 包,此时你有两种选择,Gson 和 FastJson ,前者是 Google 家的,后者是阿里的,在中国,使用 FastJson 的人会更多一些。jar 在哪?戳它 → Gson / FastJson
1. jar 包的引入
2. 使用引入的库
Gson 和 FastJson 的使用方式略有不同,这里就只演示 FastJson 的实际使用,Gson 的使用我就用文本形式叙述了奥。
这是将对象转为 JSON 格式。
运行结果:
我们再把他转回来。
运行结果
怎么样?挺简单叭。
接下来附上 Gson 的使用方式文本:
·转换JSON字符串的步骤:
1. 引入JAR包
2. 在需要转换JSON字符串的位置编写如下代码即可:
String json = new Gson().toJSON(要转换的对象);
案例:
Book b = BookDao.find();
String json = new Gson().toJson(b);
System.out.println(json);
·将JSON字符串转换为对象
1. 引入JAR包
2. 在需要转换Java对象的位置, 编写如下代码:
对象 = new Gson().fromJson(JSON字符串,对象类型.class);
案例:
String json = "{……}";
Book book = new Gson().fromJson(json, Book.class);
System.out.println(book);