zoukankan      html  css  js  c++  java
  • js中json的转换


    //aa='{"id":0,"appId":"app***********Id","appSecret":"appSexxxxxxxxxrcret","addBalance":111,"updateTime":0}';
    var b = JSON.parse(aa); //将字符串类型的json字符串转换对json对象 var c=$.parseJSON(aa); //将字符串类型的json字符串转换对json对象
    alert(b.appId);//app***********Id
    alert(c.appId); //
    appSexxxxxxxxxrcret
                var d=JSON.stringigy(b)//将json对象转换为json的字符串 } })
    d={"id":0,"appId":"app***********Id","appSecret":"appSexxxxxxxxxrcret","addBalance":111,"updateTime":0}
           

    //json字符串转对象

      var obj = eval('(' + str + ')');

     var obj = str.parseJSON(); //由JSON字符串转换为JSON对象

    var obj = JSON.parse(str); //由JSON字符串转换为JSON对象

    对于服务器返回的JSON字符串,如果jquery异步请求将type(一般为这个配置属性)设为“json”,或者利用$.getJSON()方法获得服务器返回,那么就不需要eval()方法了因为这时候得到的结果已经是json对象了,例如:

    $.getJSON("http://127.0.0.1:8080/kabao-api/xtetest/c.do",
                            function(cc) {
                              这个时候的cc就是json的object对象
                               });

     

     还有一种解析方式就是使用Function对象来完成,它的典型应用就是在JQUERY中的AJAX方法下的success等对于返回数据data的解析
    var str='{"name":"userName","age":28}';
    var obj=(new Function("","return "+json))();
    此时的data就是一个会解析成一个 json对象了.

    特别注意:如果obj本来就是一个JSON对象,那么使用eval()函数转换后(哪怕是多次转换)还是JSON对象,但是使用parseJSON()函数处理后会有问题(抛出语法异常)

    //对象转json字符串

    var last=obj.toJSONString(); //将JSON对象转化为JSON字符,必须要引入一个js才能使用,在https://github.com/douglascrockford/JSON-js上获取到这个js,一般现在用json2.js。

     var last=JSON.stringify(obj); //将JSON对象转化为JSON字符

    上面的几个方法中,除了eval()函数是js自带的之外,其他的几个方法都来自json.js包。新版本的 JSON 修改了 API,将 JSON.stringify() 和 JSON.parse() 两个方法都注入到了 Javascript 的内建对象里面,前者变成了 Object.toJSONString(),而后者变成了 String.parseJSON()。如果提示找不到toJSONString()和parseJSON()方法,则说明您的json包版本太低,

    为什么要 eval这里要添加('('+str+')') ”呢?

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

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

  • 相关阅读:
    Use 'mysqld --thread_stack=#' to specify a bigger stack.
    Caused by: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax;
    interface interface com.alibaba.dubbo.common.compiler.Compiler, class line com.alibaba.dubbo.common.compiler.support.JavassistCompiler) in
    javax.servlet.http.HttpServlet was not found on the Java Build Path
    js_jquery单机事件不起作用
    JavaScript 执行环境及作用域
    闭包的使用场景
    YUI css reset
    比较经典的数组去重和数组排序
    css 响应式布局
  • 原文地址:https://www.cnblogs.com/dashuai01/p/4875477.html
Copyright © 2011-2022 走看看