json数据是我们开发中最常见的数据格式了,一般来说,数据传输都是通过json数据或者xml格式数据序列化然后通过网络传输,在接收端进行反序列化将二进制数据转换为json / xml
写这篇博客的目的是巩固一下知识,很新手向。过去在面试时被问到有关json是什么这个问题时,我的回答显得十分的简陋,只是简单地回了一句:“json就是键值对形式地字符串”,因为我当时对json地认知就是以键值对形式如"name":"zhangsan"这样形式存在的字符串
这里先不提json的转换,既然说基础,就先从最基础的说起,那么,什么是json?json数据有哪些常见的形式呢?
先来回答第一个问题:
- JSON全称:JavaScript Object Notation(JavaScript 对象表示法)
- JSON 是轻量级的文本数据交换格式JSON 比 XML 更小、更快,更易解析。
- JSON 独立于语言 *
- JSON 具有自我描述性,更易理解
上面描述的是json的概念解释,要概括的话,json是一种数据格式,同字符串,xml一样都是一种数据格式,计算机传输数据基于二进制,要传输数据就要先转换成二进制数据,二进制数据中包含被序列化之前的格式信息,按照 要求的格式再反序列化
灵魂画手出动!
那么json有哪些常见形式呢?
在编辑器中我们常见的格式是大概分两种,一种是json对象,一种是json数组
在idea编辑器界面,json对象看起来是这样的(因为都是字符串)
"{'name':'zhangsan','age':15,'sex':'male'}"
或者这样的"{\"name\":\"zhangsan\",\"age\":13,\"name\":\"zhangsan\"}" 二者在视觉上有点区别,因为在java中位于双引号内部的引号前面需要加转义符\,二者含义完全一样,标识明显,都是以花括号开头和结尾,这一注意数字类型数据值是不加引号的,如age字段
json数组是这样的
"[\"zhangsan\",\"lisi\",\"wangwu\"]" 或者这样的"['zhangsan','lisi','wangwu']" 或者数组内可以是json对象"[{\"name\":\"zhangsan\",\"age\":13,\"name\":\"zhangsan\"},{\"name\":\"zhangsan\",\"age\":13,\"name\":\"zhangsan\"}]" ,同理,这里的转义符可以换为单引号
数组内部可以包含多个对象,对象内部可以有多个属性,跟java对象一样,json对象的属性也可以是json数组
"{
\"name\":\"Bill Gates\",
\"age\":62,
\"cars\":[ \"Porsche\", \"BMW\", \"Volvo\" ]
}"
合理利用json对象和json数组,可以表示很复杂的数据结果,和java中的对象嵌套一样
到这里你就可以发现,我之前说json是键值对的说法是不准确的,json可以是json数组,可以是json对象,但不一定是键值对
那么,聪明的你一定可以发现,json数组和java数组还有List很像,json对象和java对象很像,json对象内部的键值对和Map数据很像,没错,它们都是可以相互转换的,借助阿里巴巴的fastjson就可以做到,很快捷
在我们java后台看来,无论形式多复杂,json都是一个字符串,它最常见的用途就是作为web传输数据的工具,前端将json数据转换为javascript对象在网页中使用该数据