zoukankan      html  css  js  c++  java
  • JSON(二)——JavaScript中js对象与JSON格式字符串的相互转换

    首先我们来看一下js中JSON格式的字符串

    var JSONStr1 = "{"name" : "张三"}";

    注意以下的写法不是js中JSON格式的字符串,它只是一个js的字符串。

    var JSONStr2 = "{'name' : '张三'}";

    我们看JSON语法中对于字符串的定义是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。

    下面我们来看一下在js中怎么把JSON格式的字符串转换成一个JS对象。(

    var jsObj3 = eval("(" + JSONStr1 + ")");
    var jsObj4 = JSON.parse(JSONStr1);

    推荐使用第二种方式具体原因请参看http://www.json.org.cn/resource/json-in-javascript.htm

      此外提一句使用这两种方式转换后的js对象,应该是“一个符合JSON数据格式的js对象”,也就是说它的属性是带着引号的,这只是我的一种猜测,因为如果JSON格式的字符串如下表示:

    var JSONStr1 = "{"f[name]" : "张三"}";

      那么转换后的JS对象的属性必定要加上引号,因为js对象的属性不加引号只能使用字母,数字,下划线和$符号表示,使用其它符号属性就要加上引号了,所以说JS对象字面量表示法中属性加上引号是不会错的。另外如果JSON格式的字符串如上所示,那么转换后的js对象对f[name]取值就不能使用 jsObj4.f[name] 要用 jsObj4['f[name]'] ,因为有特殊字符,这点要注意了。对于我的猜测,读者要有异议,可以提给我。

    我们再来看看在js中js对象与JSON格式字符串的转换。下面我准备了几组js对象加以说明:

    <input type="button" value="测试按钮1" onclick="testJson();"/>
    <script type="text/javascript">
        //(1) 这是一个js对象
        var jsObj1 = {
            name : "张三"
        }
        //(2)这是一个内部带有方法js对象。
        var jsObj2 = {
            name : "张三",
            func : function(){
                alert("hello");
            }
        }
        //(3)这是一个符合JSON数据格式的js对象
        var jsonObj = {
            "name" : "张三",
            "age" : 10,
            "remark" : {"high" :170,"address" : "beijingshi"}
        }
        // js数组对象
        var jsArray = [
            {name : "张三"},
            {"age" : 10}
        ]
    
        function testJson(){
    
            var JSONstr1 = JSON.stringify(jsObj1);
            var JSONstr2 = JSON.stringify(jsObj2);
            var JSONstr3 = JSON.stringify(jsonObj);
            var JSONstr4 = JSON.stringify(jsArray);
            alert(JSONstr1);
            alert(JSONstr2);
            alert(JSONstr3);
            alert(JSONstr4);
    
        }

    看一下弹框的内容:

    (1)                (2)                                       (3)                       (4)

                        

    其中 (1)、(3)、(4)的执行结果说明,JSON解析器的stringify()函数对于js对象是fou符合JSON格式是不加限定,都可以把js对象转换成JSON格式字符串。

    (2)的执行结果说明,js对象中如果没有JSON表示的值(比如函数和undefined)将会被排除。

    参考文章:

        http://www.json.org.cn/resource/json-in-javascript.htm

      最后说一点,我们作为程序员,研究问题还是要仔细深入一点的。当你对原理了解的有够透彻,开发起来也就得心应手了,很多开发中的问题和疑惑也就迎刃而解了,而且在面对其他问题的时候也可做到触类旁通。当然在开发中没有太多的时间让你去研究原理,开发中要以实现功能为前提,可等项目上线的后,你有大把的时间或者空余的时间,你大可去刨根问底,深入的去研究一项技术,为觉得这对一名程序员的成长是很重要的事情。

      

      

  • 相关阅读:
    [转]只有程序员才能看懂的幽默
    论安防集成管理平台规范标准建设的重要性和必要性
    视频集成技术演进与创新实践
    (转)jQuery中Ajax事件beforesend及各参数含义
    (转)如何打一手好Log
    marquee标签
    如何学习Git,如何使用Git
    学习vue
    python安装教程
    Jmeter压力测试(入门篇)
  • 原文地址:https://www.cnblogs.com/cdf-opensource-007/p/6384724.html
Copyright © 2011-2022 走看看