zoukankan      html  css  js  c++  java
  • 关于json,你可能不知道的东西.

    JSON: JavaScript Object Notation (javaScript 对象表示法).

    JSON 是一种名称/值对的结构。

    一个对象一{左括号开始,以}右括号结束。没哥名称后跟一个:冒号;'名称/值' 对之间用','逗号隔开。(最后一个键值对后不用分号

    这里的 名称 要用 "(分号) 引起来,不然可能报错。(可能哦)

    你可以用下面的方式去表示:

    {"name":"helloyangzhi"}

    当然你可以多个一起串联起来:

    {"name":"helloyangzhi","email":"helloayngzhi@gmail.com","age":"21"}
    数组是( value)的有序集合,一个数组以 "[" 左中括号开始,"]" 右中括号结束,值之间用“ ,”逗号隔开。
    当然,如果你要表示数组:

    { "people": [
    
    { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },
    
    { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"},
    
    { "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }
    
    ]}

    这里表示一个people变量,后面包含三条记录。

    当然还可以表示多个变量:

    { "programmers": [
    
    { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },
    
    { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb" },
    
    { "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }
    
    ],
    "authors": [
    
    { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },
    
    { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },
    
    { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }
    
    ]}

    那么在实际开发中,你可以将一个json对象赋值给一个js对象.


    var json = {
          "name":"yangzhi",
          "email":"helloyangzhi@gmail.com"
    }

     这样能够在方法中传递。


    在用jquery做异步传输时,如果不不指定返回对象类型,或者以字符串的方式返回。

    那么就需要将字符串转换成json对象。

    如下:

    var obj = eval("(" + data + ")");

    这样 obj 就转换成obj对象。

    为什么要 eval这里要添加 “("("+data+")");//”呢?

    原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。

    加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:
    alert(eval("{}"); // return undefined
    alert(eval("({})");// return object[Object]

    对于这种写法,在JS中,可以到处看到。

    如: (function()) {}();  做闭包操作时等。

    当然,如果你在做异步请求是指定返回为json对象。那么就不需要用eval()方法了,可以直接使用。

    如:

    $.post(url,{},function(){},"json");

    那么在这里就指定了返回数据类型为json对象。

    注:这里需要注意使用eval() 方式,是动态的去执行字符串,那么也可能是js脚本,这样就可能存在一定的系统安全问题。

    所以可以采用一些规避了eval()的第三方脚本库。

    第二种解析方式就是使用Function对象来完成,它的典型应用就是在JQUERY中的AJAX方法下的success等对于返回数据data的解析

    var json='{"name":"CJ","age":18}';
    
    
    data =(new Function("","return "+json))();


  • 相关阅读:
    Y460/Y470 Nvidia optirum solution : switch off the nvidia card and solve screen flash problem
    matlab中提示错误使用* BLAS loading error解决方法
    学习笔记 第十四周 第一篇
    学习笔记 第十三周 第一篇
    学习笔记 第十二周 第一篇
    学习笔记 第十一周 第一篇
    学习笔记 第十周 第一篇
    学习笔记 第九周 第一篇
    学习笔记 第八周 第二篇(修改版)
    学习笔记 第八周 第二篇
  • 原文地址:https://www.cnblogs.com/yangzhi/p/3576567.html
Copyright © 2011-2022 走看看