使用JavaScript操作JSON

注意,JSON只是一种格式,而不是对象,不存在JSON对象。JSON只有字符串形式,就是我们常说的JSON字符串:key/value值和数组形式的字符串。只能说有JSON格式的JS对象,JSON格式的字符串,JSON格式的数组。当JSON字符串转换为Java对象是就是Java对象,当JSON字符串被转换为JS对象时,就是JS对象。因为JSON格式和JS对象的语法相似(JS对象的键可以加引号也可以不加引号,JSON格式的键必须加双引号),所以我们有时候误以为了JSON就是JS对象。

html页面: 


<html>
<head>
    <title>Title</title>
    <meta charset="UTF-8" content="text/html" >

    <script>
        //假如给出的是这种形式,province已经是一个JSON格式的js对象,不需要解析
        var province={
            "name":"浙江",
            "cityCount":3,
            "cities":[{
                "name":"宁波",
                "id":1
            },{
                "name":"杭州",
                "id":2
            }
            ]
        }
        print1(province)
        console.log("****************************")

        //从服务器接收得到的一般是字符串,它只是JSON格式的字符串所以需要用eval()或JSON.parse()将其转换为JS对象
        var str="{\"name\":\"浙江\",\"cityCount\":2,\"cities\":[{\"name\":\"宁波\",\"id\":1},{\"name\":\"杭州\",\"id\":2}]}";
        //1.用eval()解析
        var strObj=eval("("+str+")");
        print2(strObj)
        console.log("************************")

        //2.用JSON.parse()解析
        var strObj1=JSON.parse(str);
        print2(strObj1)

        //第一种遍历方法,传统for循环
        function print1(obj) {
            console.log(obj.name,obj.cityCount);
            for (var i=0;i<obj.cities.length;i++){
                console.log(obj.cities[i].name,obj.cities[i].id)
            }
        }

        //也可以用第二种遍历方法,for in
        function print2(obj) {
            for(var x in obj){
                if(!(obj[x] instanceof Array)){
                    console.log(x,obj[x])
                }else {
                    for (var i in obj[x]){
                        for (var m in obj[x][i]) {
                            console.log(m, obj[x][i][m]);
                        }
                    }
                }
            }
        }

    </script>
</head>
<body>

</body>
</html>

运行结果:

思考:JSON.parse()和eval()的区别?

JavaScipt中提供的文本转换为JSON对象的函数只有eval(),JSON.parse()其实是对eval()函数的封装。如果使用eval()转换文本需要在括号中添加“()”声明。另外,如果文本中包含程序代码,eval()会直接将其执行,所以安全性较差。而JSON.parse()会用正则表达式验证所给的文本是否有程序代码,若有,则会抛出异常,操作更安全。

猜你喜欢

转载自blog.csdn.net/linghuainian/article/details/82744484