什么是json?如何理解json这种数据格式,个人详解

2021-05-29 08:03

阅读:645

标签:访问   数据   必须   获取   多少   范围   strong   简洁   --   

什么是json?如何理解json这种数据格式?

百度百科解释:

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

1、json是什么 ,json字符串

从百科解释,我们可以得出简化的定义:json是一种数据格式,json是一种格式,而不是一种数据。

我在初学javascript的时候,接触到json的时候一直觉得很绕,因为总是听到有人说传递“json数据,json数据”,如果是数据的话就一定有数据类型,就下意识认定json是一种javascript的数据类型,但js中找不到这种数据的类型。

后来,大致总结了三种说法,

1、传递“ json数据,json数据”,

2、传递“ json格式的数据 ”,

3、传递“ json格式的 字符串”,

我认为刚开始理解的时候,用第三种说法解释起来更好理解一些,

我们平常在js中说的json数据,实际上在发送和接收的时候都只是一个字符串而已,只不过这个字符串的样子带有一定规则,它遵循json这种格式。

要想不那么绕,只要记住 json数据 = json字符串

json数据(json字符串)究竟长什么样,让我们来举个栗子:

1、第一种是类似于 对象数组 格式的字符串(每个元素是对象,可以称为json数组):

? String json_arr_str = ‘[{"a",123},{"b",321}]‘, //里面的双引号是必须的,用\转义

2、第二种是类似于 对象 的字符串(每个元素是键值对,可以称为json对象):

? String json_obj_str = ‘{"a":123,"b","321"}‘,//里面的双引号是必须的,用\转义

3、第三种是基于前两种格式互相嵌套的字符串,只要每一层的数据都符合上面的两种的各一种,理论上嵌套多少层都没问题

json是什么,以及json数据我们也见过了。那么

2、如何对json数据进行操作呢?

一般前后端传递都是直接传的字符串,开始我们获取数据只是一个字符串而已,而字符串若包含的很多信息,不是收到就能直接用的,如何将字符串中包含的的数据有规律提取出来也是个问题。

每个编程语言都有自己的语法,但字符串类的数据都是编程语言必有的,所以json格式数据的适用范围很广。我们现在用的编程语言几乎是面向对象的,以对象为数据的载体,操作数据都围绕着对象来展开,而不是直接操作字符串。

试想一下,数据的传递都是很频繁的,若需要自己写方法反复操作字符串岂不是很不方便?若是没有规定传递数据的格式,总不能每次接收到字符串数据,都自己去做切片操作把数据切出来吧。万一这次传的数据格式与上次不一样,那么我上一次写的解析代码不能用,还得针对数据再写一次方法。

恰好,我们定义的json格式的字符串数据,格式就是固定的,很好的解决了困扰之一。因为json数据格式,实际上只有上面说的两种情况,用编程语言实现了对json字符串的这些操作其实不难,而且都是可以重复使用的。

小结一下:数据传递是以字符串的方式来传递的,若是要方便的获取里面的信息,就得约定好字符串数据的格式,不然每次传出递数据没啥,但解析数据就得乱套。以json这种格式传递的数据,就是这样一个带有约定规则的字符串,对接收者来说解析其中数据很方便。

现在一些编程语言已经内置了方法实现了,可以将 json字符串,语言对象 二者相互转化。例如javascript,php语言等。(具体方法不举例,搜索就有)

再试想一下,若是有个内置方法可以让你解析json数据成该编程语言的对象,那么你就可以用这种语言访问对象的方式,很方便的去访问对象里面的各种属性。就省去了很多麻烦。

而有些编程语言即使没有内置的json字符串,语言对象 二者互相转化的方法。但网上已经有开发者写好的现成的方法可以使用。

例如java就有一些工具包。其中之一例如阿里巴巴自己开发的fastjson这个jar包,引用里面的方法,可以很方便的对

json字符串,json数组, json对象, javaBean对象四者的相互转化。

上面提到的就只有json字符串,和语言对象这两种数据的转化,但这里为什么多了json数组和json对象这两个名词呢,其实json数组,json对象他们本质上就是json字符串,因为他们符合上面我写的三点json语法的前两点。

为什么还要多余的分出来呢?很难说具体的原因,也许是开发者为了给我们更多的选择,我在使用的时候就感觉到,将json字符串转化成java对象的时候,还得自己写个跟json字符串的数据相匹配格式的类对象,然后再用对象访问某个属性,就很麻烦。但是json字符串直接转化成json数组,或json对象之后,里面还有配套的方法可以直接转化成json数组,json对象的方法。这样是不是更方便些?

再说说json对象与对象的区别吧,二者都有对象二字,是不是感觉自己都快分不清了

举个栗子对比一下:

json对象: String json_obj_str = ‘{"a":123,"b","321"}‘

js对象: let js_obj = {a:123,b:"321"}

可以看到,二者是很有区别的。

json对象首先是字符串,它遵循字符串的操作规则,并且里面的key是有双引号的。

而js对象首先它是js语言的对象,它则遵循的js本身语言的操作规则。

同理json数组与编程语言中的数组也是一样的。


再说一下为什么百度百科说json是一种“轻量级”数据格式,做个对比吧,比如xml数据,同为文本格式的内容,xml数据每个数据都有标签套在外面,而json数据只需要外面加个 []或者{},里面的数据用,隔开,键和值中间只要一个:隔开就行。要是数据庞大的话,无论怎么说,几个简单的符号都比一堆标签更简单,占内存更小。

总结:说到底,json是一种数据格式,json数据就是一个字符串,而 json数组 , json对象 就是满足上面说的1,2两点的格式而存在的json字符串而已,本质上就是json字符串。json字符串只有json数组,json对象,或者二者互相嵌套的这三种形式。鉴于合法的json字符串数据的形式不同,编程语言语法不同,开发解析方法的人需求不同。每个编程语言实现对json的操作的方法也略有不同。但理解了json是个什么东西,本质上其实还是一样的,无非都是为了方便自己提取传过来的数据。甚至我们自己也能写对应的json相关方法(我不能,见笑见笑了)。**

下面再附上一条有关java ,fastjson包下载,以及使用的博客链接:
https://blog.csdn.net/srj1095530512/article/details/82529759

什么是json?如何理解json这种数据格式,个人详解

标签:访问   数据   必须   获取   多少   范围   strong   简洁   --   

原文地址:https://www.cnblogs.com/taoxiaoyao/p/14746988.html


评论


亲,登录后才可以留言!