前端js把json字符串转json对象(java对象转json对象命令)
最近在逛编程问题解答的时候,看到这样的提问:如何将一个json数组类型的字符串转换为json数组,然后遍历数组取出json对象,最后在js中取出里面的属性。在这里给同样有疑问的朋友做下解答,当然欢迎大神留言区留下更好的回答。
首先我们追本溯源问一下,json究竟是什么东西?为什么json就是易于数据交换?本文将从以下几个方面去理解json:
首先是对“json是一种轻量的数据交换格式”的理解;
然后来看经常被混为一谈的json和js对象的区别;
json字符串转换成json数组并遍历属性值;
什么是json?
json是一种轻量级的数据交换格式。
如果没有去过json的官方介绍可以去一下这里,官方介绍已经很清楚地表述了json是什么,我将json是什么提炼成以下几个方面:
1. 一种数据格式
什么是格式?就是规范你的数据要怎么表示,举个栗子,有个人叫“二百六”,身高“160cm”,体重“60kg”,现在你要将这个人的这些信息传给别人或者别的什么东西,你有很多种选择:
以上所有选择,传递的数据是一样的,但是你可以看到形式是可以各式各样的,这就是各种不同格式化后的数据,json是其中一种表示方式。
2. 基于文本的数据格式
json是基于文本的数据格式,相对于基于二进制的数据,所以json在传递的时候是传递符合json这种格式(至于json的格式是什么我们第二部分再说)的字符串,我们常会称为“json字符串”。
3. 轻量级的数据格式
在json之前,有一个数据格式叫xml,现在还是广泛在用,但是json更加轻量,如xml需要用到很多标签,像上面的例子中,你可以明显看到xml格式的数据中标签本身占据了很多空间,而json比较轻量,即相同数据,以json的格式占据的带宽更小,这在有大量数据请求和传递的情况下是有明显优势的。
4. 被广泛地用于数据交换
轻量已经是一个用于数据交换的优势了,但更重要的json是易于阅读、编写和机器解析的,即这个json对人和机器都是友好的,而且又轻,独立于语言(因为是基于文本的),所以json被广泛用于数据交换。
以前端js进行ajax的post请求为例,后端php处理请求为例:
- 前端构造一个js对象,用于包装要传递的数据,然后将js对象转化为json字符串,再发送请求到后端;
- 后端php接收到这个json字符串,将json字符串转化为php对象,然后处理请求。
可以看到,相同的数据在这里有3种不同的表现形式,分别是前端的js对象、传输的json字符串、后端的php对象,js对象和php对象明显不是一个东西,但是由于大家用的都是json来传递数据,大家都能理解这种数据格式,都能把json这种数据格式很容易地转化为自己能理解的数据结构,这就方便啦,在其他各种语言环境中交换数据都是如此。
经常被混为一谈的json和js对象
很多时候都听到“json是js的一个子集”这句话,而且这句话我曾经也一直这么认为,每个符合json格式的字符串你解析成js都是可以的,直到后来发现了一个奇奇怪怪的东西…
1. 两个本质不同的东西为什么那么密切
json和js对象本质上完全不是同一个东西,就像“斑马线”和“斑马”,“斑马线”基于“斑马”身上的条纹来呈现和命名,但是斑马是活的,斑马线是非生物。
同样,”json”全名”javascript object notation”,所以它的格式(语法)是基于js的,但它就是一种格式,而js对象是一个实例,是存在于内存的一个东西。
说句玩笑话,如果json是基于php的,可能就叫pon了,形式可能就是这样的了[‘propertyone’ => ‘foo’, ‘propertytwo’ => 42,],如果这样,那么json可能现在是和php比较密切了。
此外,json是可以传输的,因为它是文本格式,但是js对象是没办法传输的,在语法上,json也会更加严格,但是js对象就很松了。
那么两个不同的东西为什么那么密切,因为json毕竟是从js中演变出来的,语法相近。
2. json格式别js对象语法表现上严格在哪
先就以“键值对为表现的对象”形式上,对比下两者的不同,至于json还能以怎样的形式表现,对比完后再罗列。
可以看到,相对于js对象,json的格式更严格,所以大部分写的js对象是不符合json的格式的。
json字符串转换成json数组并遍历属性值
方式一:使用iterator迭代器遍历取值
方法二:使用for循环
下一篇: 漂亮的thinkphp 跳转页封装示例