当前位置: 移动技术网 > IT编程>开发语言>JavaScript > JSON解析

JSON解析

2018年11月10日  | 移动技术网IT编程  | 我要评论

以下为网络上搜集的关于json的资料,整合为随笔记录,供以后回顾。

百度:https://baike.baidu.com/item/json/2462549?fr=aladdin

--------------------

一. 数据格式
  1.数组方式:
        [
            {"key1": "value1"},
            {"key2": "value2"}
        ]
  2. 对象方式:
     {
          “key1: "value1",
           "key2": "value2",
           "key3": [
                {"key31": "value31"},
                {"key32": "value32"}
            ]
      }
二.json方法
    1. json.stringify( {} , [ ] , ""),把数据序列化为json字符串
        参数一 :要序列化的数据(object)
       参数二 :控制对象的键值,只想输出指定的属性,传入一个数组
       参数三 :序列化后,打印输出的格式(一个tab ,可以更直观查看json)
   2.json.parse(json字符串); 把json数据反序列化为一个js对象。


原文:https://blog.csdn.net/weixin_41804429/article/details/81036008

--------------------

以前老师说了一句java格式的json转换成js格式的json,我从那一直开始纠结,json既然是数据交换语言,格式都一样怎么还有语言之分的?纠结至今,发现,还是之前的学习资料有缺陷,没有详细讲解json,花了一个晚上和一个上午的时间整理了一些有关json的资料:

json  结构有两种结构
json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构。
1、对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。
2、数组:数组在js中是中括号“[]”括起来的内容,数据结构为 ["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。
经过对象、数组2种结构就可以组合成复杂的数据结构了。
 为了方便地处理json数据,json提供了json.js包,下载地址:http://www.json.org/json.js
    在数据传输流程中,json是以文本,即字符串的形式传递的,而js操作的是json对象,所以,json对象和json字符串之间的相互转换是关键。例如:

    json字符串:
    var str1 = '{ "name": "cxh", "sex": "man" }';
    json对象:
    var str2 = { "name": "cxh", "sex": "man" };
    一、json字符串转换为json对象
    要运用上面的str1,必须运用下面的要领先转化为json对象:
    //由json字符串转换为json对象
    var obj = eval('(' + str + ')');
    或者
    var obj = str.parsejson(); //由json字符串转换为json对象
    或者
    var obj = json.parse(str); //由json字符串转换为json对象
    然后,就可以这样读取:
    alert(obj.name);
    alert(obj.sex);
    特别留心:如果str本来就是一个json对象,那么运用 eval()函数转换后(哪怕是多次转换)还是json对象,但是运用 parsejson()函数处理后会有疑问(抛出语法异常)。
    二、可以运用 tojsonstring()或者全局要领 json.stringify()将json对象转化为json字符串。
    例如:
    var last=obj.tojsonstring(); //将json对象转化为json字符
    或者
    var last=json.stringify(obj); //将json对象转化为json字符
    alert(last);
    留心:
    上面的多个要领中,除了eval()函数是js自带的之外,其他的多个要领都来自json.js包。新版本的 json 修改了 api,将 json.stringify() 和 json.parse() 两个要领都注入到了 javascript 的内建对象里面,前者变成了 object.tojsonstring(),而后者变成了 string.parsejson()。如果提示找不到tojsonstring()和parsejson()要领,则说明您的json包版本太低。
至于老师说的eval函数将java格式的json转换成js格式的json,我想更准确地来说,应该是字符串形式的json被当作一堆js代码解析。确实是被误导了一些。。最关键的是,老师用的是
/*这一段我自己看就行
jsonarray jsonarray = jsonarray.fromobject(city);
string jsonjava = jsonarray.tostring();
然后又用了
jsonobject jso = new jsonobject();
jso.put("msg", "success");
jso.accumulate("userlist", userlist);
把我整懵逼了
*/
以下的理解我觉得很好,
1.js是一种脚本语言,所谓的对象,其实还只是处在源码阶段,当这段符合语法的文本被脚本引擎解释之后,在内存中才会产生对象,至于是否符合语法,取决于脚本引擎。
2.json不是一种语言,它仅仅是一种数据的表达方式,从某种程度上来讲,json跟xml没有什么区别。
之所以lz会有这样的疑虑,原因在于对数据的理解存在偏差,对于js的字面量来说,这段文本仅仅是代码的一部分,相当于指令,而json文本,其本身就表示了数据。二者相同的地方是,看起来都是数据,而且恰巧又都是文本;不同的地方在于,js字面量的文本是被脚本引擎直接解析的,而json的文本,如果要转化为js对象的话,是交给eval函数来处理的,那么,如何理解json的文本,就取决于这个函数,而不是脚本引擎,因为这2者的处理根本就不在一个层面上。
另外,js必须交给js脚本引擎处理,而json的字符串,任何程序都能处理,至于引号的问题,取决于json解析器的容忍程度,如果你愿意,也可按照自己的意愿写一个解析器,能够容忍包括不写引号,或者单/双引号,甚至其他任何符号作为边界符。


原文:https://blog.csdn.net/qq_32528231/article/details/52783210

--------------------

json与javascript的关系

json是一种轻量级的数据交换格式,全称——javascript 对象表示法(javascript object notation)。

  类比xml,你可以把json看作是一种存储数据的格式类型,一种数据规范。

  描述json格式数据的语法采用了js对象字面量的表示方法,但是你不能的把js对象就看做是json了,同xml一样json只是一种存储数据的类型,它是独立于语言存在的,只是在不同的编程语言中对这种数据类型的实现不同,例如在javascript中使用javascript对象对这种数据格式进行实现,那么在java中当然是用java对象实现。

  同时,既然json这种数据格式用js对象字面量的表示方法进行描述,那么描述json的语法就是js对象字面量表示法语法的一个子集。如下图所示:

 

                    

 

  下面我们看一下js对象的字面量表示法,及json格式的数据是怎么用这种语法实现的。 

复制代码
<script type="text/javascript">
    //这是一个js对象,属性不加"",符合js对象的字面量表示法语法但不符合json语法。 var jsobj1 = { name : "张三" }
    //这是一个内部带有方法js对象,虽然属性加了"",但json的语法中属性的值不能是方法。 var jsobj2 = { "name" : "张三", "func" : function(){ alert("hello"); } }
    //这是一个符合json数据格式的js对象,是javascript语言中对json这种数据格式的实现形式,也是我们常说的"json对象"。
    //这种js对象字面量的表示方法,也就是"json对于其数据形式规范的语法",所以说"json的语法就是js对象字面量表示法语法的一个子集"。 var jsonobj = { "name" : "张三", "age" : 10,
       "remark" :{ "high" : 170 ,"address" : "beijinghaidian" }
        }

</script>
复制代码

  其实对于"js对象的字面量表示法"中属性加不加引号是"js对象"还是"json对象的说法本身就是错误的,加与不加引号它都是"js对象",只是你加了引号以后,从语法上来说符合json的语法规则,而json的语法规则又是"js对象的字面量表示法"语法规则的子集,所以无论怎么表示,他都是一个"js对象"。那么有没有属性必须要加引号的情况呢?我们知道js对于变量的命名规则是数字、字母、下划线及$符号,属性不加引号时也符合这个规则,但要是属性中有这四种之外其它的符号如"[" 或者 "."等等,属性就必须引号来表示。

  说到底,json是一种数据格式,一种对于数据的规范,因为其居有自我描述性及简洁的语法规则,让它成为了一种在不同语言之间理想的数据交换的格式,json独立于语言而存在,任何站在语言的角度及对象层面对他的解释都是有局限性或者是错误的。

  参考文章:

    (1):http://www.json.org.cn/index.htm

    (2):http://www.w3school.com.cn/json/json_syntax.asp

原文:https://www.cnblogs.com/cdf-opensource-007/p/6380472.html

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网