eval、JSON.parse和JSON.stringify

早期的JSON解析器基本上就是使用JavaScript的eval()函数。由于JSON是JavaScript语法的自己,因此eval()函数可以解析、解释并返回JavaScript的对象和数组。ECMAScript 5对解析JSON的行为进行了规范,定义了全局对象JSON。 JSON对象有两个方法:stringify()和parse()。在最简单的情况下,这两个方法分别用于把JavaScript对象序列化为JSON字符串和把JSON字符串解析为原生JavaScript

eval

eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码
说明

方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval() 函数传递 String 对象来作为参数。
如果试图覆盖 eval 属性或把 eval() 方法赋予另一个属性,并通过该属性调用它,则 ECMAScript 实现允许抛出一个 EvalError 异常。

使用示例:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script src="Scripts/jquery-2.1.0.js"></script>
    <script type="text/javascript">
        function GoHome() {
            alert("go home");
        }
        $(function () {
            var toolbar = {
                "name": {
                    "key":"abc"
                }
            }
            var str = "toolbar.name.key";
            alert(eval(str));//解析为json的值
            $("button").click(function () {
                var r = "GoHome()";
                eval(r);//执行方法
            });
            eval("x=10;y=20;document.write(x*y)")
           //JSON格式:
            /*
            (1) 单个对象{"变量名1":"变量值1","变量名2":"变量值2"}
            (2) 数组[{ "变量名11":"变量值1","变量名12":"变量值2" },{ "变量名21":"变量值1","变量名22":"变量值2" },{ "变量名31":"变量值1","变量名32":"变量值2" }]
            */
            //情况一:
            var t = '{"Name":"xiao","Sex":"man"}';
            var d = eval('(' + t + ')');
            //alert(d["Name"]);//弹出xiao
            //情况二:
            var t1 = '[{"Name":"zhang","Sex":"Man"},{"Name":"Wang","Sex":"Female"}]';
            var d1 = eval('(' + t1 + ')');
            alert(d1[0]["Name"]);
       });

    </script>
</head>
<body>
    <button>Go</button>
</body>
</html>

JSON.parse


作用:将一个对象或者字符串解析为JSON对象

语法:JSON.parse(text,[Function reviver])
参数说明:
text:要解析为json对象的字符串
reviver:过滤(还原函数),接收两个个参数,一个键和一个值,返回一个值(与stringify 一样)
如果还原函数返回undefined,则表示要从结果中删除相应的键;如果返回其他值,则将该值插入到结果中
示例:

//parse 用于从字符串解析出json对象,
           // 一个参数
            var Student = {
                age: "20",sex: "male"
            };
            var jsonString = JSON.stringify(Student);
            var obj = JSON.parse(jsonString);
            alert(obj.age);
			//注意:单引号写在{}外,每个属性名都必须用双引号,否则会抛出异常。
            var str = '{"name:"xiaowang","age":"23"}';
            var result = JSON.parse(str);
            alert(result.age);
			//两个参数
			var student = {
                name: "xiao",age:"20"
            }
            var jsonstu = JSON.stringify(student);
            var stuObj = JSON.parse(jsonstu,function (key,value) {
                if (key == "age") {
                    return 22;
                } else {
                    return value;
                }
            });
            alert(stuObj.name);
            alert(stuObj.age);

JSON.stringify


作用:用于序列化对象,可以理解为把对象类型或者字符串类型转换为JSON类型字符串

语法:JSON.stringify(value,[,replacer][,space])
value:必选,要输出的对象
replacer:可选,过滤器,有两种情况,一种是方法,一种是数组,具体看示例
方法:把序列化后的每个对象传递到方法里面进行处理,
数组:如果前面要转换的是一个对象,如{name:"zhang",age:"20"},则在数组包含的该key的元素会被筛选出来
space:可选,使用什么来分割,具体看示例
示例:

/*
* 只有第一个参数
*/
           var Student = {
                age: "20",sex:"male"
            };
            //stringify()用于从一个对象解析出字符串
            var jsonString = JSON.stringify(Student);
            alert(jsonString);

			var person = new Object();
            person.name = "xiao wang";
            person.age = "20";
            person.location = "china";
            var personjson = JSON.stringify(person);
            alert(personjson);
			
/*
* 有两个参数,第一个参数是对象,第二个参数是数组
*/
           var person = new Object();
            person.name = "xiao wang";
            person.age = "20";
            person.location = "china";

            var filter = ["name"];

            var personjson = JSON.stringify(person,filter);
            alert(personjson);
/*
* 有两个参数,第一个参数是数组,第二个参数是数组(计算结果是第二个参数忽略)
*/
 var person = ["zhangsan","20","male","china"];
            var filter = ["zhangsan","china"];
            var jsonperson = JSON.stringify(person,filter);
            alert(jsonperson);

/*
* 有两个参数,第一个参数是数组,第二个参数是函数
*/  
function switchUpper(key,value) {
                return value.toString().toupperCase();
            }
            var person = ["zhangsan","china"];
            
            var jsonperson = JSON.stringify(person,switchUpper);
            alert(jsonperson);
			
/*
*有两个参数,第一个参数是对象,第二个参数是函数
*/
var person = new Object();
            person.name = "xiao wang";
            person.age = "20";
            person.location = "china";

            var jsonperson = JSON.stringify(person,value) {
                switch (key) {
                    case "name":
                        return "zhang";
                    default:
                        return value;
                }
            });
            alert(jsonperson);
          
/*
* 有三个参数,如果省略的话,那么显示出来的值就没有分割符,
* 如果是数组的话,那么它定义缩进的字符,如果大于10,则最多显示10个
* 如果是一些转义字符,如"\t",表示回车,那么它每一行一个回车
* 如果仅仅是字符串,就在每行输出值得时候把这些字符串附加上去,当然最大长度是10个字符
*/
//空格
 var person = ["name","age","sex","location"];
            var jsonperson = JSON.stringify(person,null,20);
            alert(jsonperson);
			//字符
			var person = ["name","hi");
            alert(jsonperson);

toJSON


有时候JSON.stringify()还是不能满足对某些对象进行自定义序列化的需求。
在这些情况下,可以通过对象上调用toJSON()方法,返回其自身的JSON数据格式。如:

 var student = {
                name: "xiao",age: "20",sex: "male",toJSON: function () {
                    return this.name + "_" + this.age;
                }
            }
            var jsonstu = JSON.stringify(student);
            alert(jsonstu);
			
			 var student = {
                name: "xiao",toJSON: function () {
                    return this.name + "_" + this.age;
                }
            }
            var jsonstu = JSON.stringify(student,value) {
                return value;//value = "name_20"
            });
            alert(jsonstu);
以上代码在student对象上定义了一个toJSON()方法,该方法返回name和id的组合。最后jsonText的值如下: "xiao_20" toJSON()可以作为函数过滤器的补充,因此理解序列化的内部顺序十分重要。假设把一个对象传入JSON.stringify(),序列化该对象的顺序是: (1)如果存在toJSON()方法而且能够通过它取得有效值,则调用方法。否则,按认顺序执行序列化。 (2)如果提供了第二个参数,应用这个函数过滤器。传入函数过滤器的值是第(1)步返回的值。 (3)对第(2)步返回的每个值进行相应的序列化。 (4)如果提供了第三个参数,执行相应的格式化。 无论是考虑滴定toJSON()方法,还是考虑使用函数过滤器,或者需要同时使用两者,理解这个顺序都是至关重要的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


AJAX是一种基于JavaScript和XML的技术,能够使网页实现异步交互,节省带宽和时间,提高用户体验。在使用AJAX时,需要通过解析JSON格式的数据,来获取所需要的数据。
在网页开发中,我们常常需要通过Ajax从后端获取数据并在页面中展示出来。其中,JSON是一种常用的数据格式。那么,在使用Ajax获取JSON数据后,如何将数据取出来呢?
在前端开发中,经常需要循环JSON对象数组进行数据操作。使用AJAX技术可以在不刷新页面的情况下异步获取数据。那么我们该如何循环JSON对象数组呢?下面我们通过一段代码来进行讲解。
AJAX(Asynchronous JavaScript and XML)是一种用于创建 Web 应用程序的技术,它使用 JavaScript 和 XML(或 JSON)来在后台异步传输数据。
AJAX技术被广泛应用于现代Web开发,它可以在无需重新加载页面的情况下,向服务器发出请求并更新页面,实现了异步更新的效果。而传递JSON数据是AJAX中比较常见的一种方法,下面是如何使用AJAX传递JSON数据的详细介绍。
Ajax是一种通过JavaScript和HTTP请求交互的技术,可以实现无需刷新页面的异步数据交互。在处理数据时,常常需要删除一些已存在的数据。本文将介绍如何使用Ajax删除JSON数据库中的数据。
在使用Ajax时,我们经常需要将数据格式化为JSON格式。JSON是一种轻量级数据交换格式,它以键值对的形式来表达数据。
AJAX是一种支持异步请求的技术,它可以让前端页面不用刷新就能向后台请求数据,并异步地展示给用户,提高了用户的体验感。其中,使用JSON格式化数据可以帮助我们更方便快捷地处理返回的数据。
AJAX是一种前端技术,可以通过异步请求来获取数据,并在页面上更新它们。JSON是一种轻量级的数据交换格式,因为它易于读取和编写,因此在Web应用程序中被广泛使用。AJAX传送JSON数据是一种常见的技术,可以让Web应用
在前端开发中,ajax是很常见的技术,它可以在不刷新整个页面的情况下请求服务器数据和更新部分页面。而当需要遍历多个json文件时,可以使用ajax循环遍历来实现。
AJAX技术是实现Web页面无刷新的最佳方式。其中json解析是一种常用的技术,它可以通过AJAX异步请求数据,再用json解析器将返回的json字符串解析成JavaScript对象。下面就让我们来看看如何使用ajax解析json数据。
AJAX技术可以在不刷新整个WEB页面的情况下与服务器进行数据交换,这使得在现代WEB应用中使用AJAX技术变得非常普遍。而访问JSON数组是一种非常常见的AJAX操作。在本文中,我们将向您展示如何使用AJAX技术循环遍历JSO
Ajax(Asynchronous JavaScript and XML)是一种在不重新加载整个页面的情况下更新网页的技术。它可以向服务器发送请求并接收响应,然后使用JavaScript动态地显示内容。
AJAX技术可以帮助我们实现对JSON数据库的循环读取。下面我们来介绍一下如何使用AJAX技术读取JSON数据库。
AJAX是一种在Web应用中实现局部更新的技术。而JSON是一种数据格式,非常适合用来表示数据。在AJAX中,我们经常需要从后端服务器获取JSON格式的数据,在前端页面中进行处理。那么,如何解析JSON数据呢?
AJAX是一种在不重新载入整个页面的情况下,能够更新部分页面的技术,它可以通过异步通信获取后台数据,其中JSON作为一种轻量级数据交换格式,常常被用来传递数据。在使用AJAX接收到后台传送的JSON数据后,需要进行解
在网站开发中,为了减少页面的刷新,异步加载技术成为了开发中越来越常见的一种技术,而 AJAX 技术就是一种常见的实现方式。其中,通过循环读取 JSON 数据能够实现页面内容的实时更新。
在前端开发中,经常需要从服务器获取JSON数据来展示在页面上,而循环遍历这些数据就需要使用AJAX以及JavaScript。本文将介绍如何使用AJAX和JavaScript来循环遍历JSON数据。
在前端开发中,我们常常需要通过 Ajax 请求后端接口获取数据并进行展示。而 JSON 数据则是一种常见的数据格式,因此我们需要了解如何通过 Ajax 获取 JSON 数据。
在使用ajax传递数据时,我们通常会遇到传递json数据类型的情况。那么,接下来我们就来仔细了解一下如何使用ajax传递json数据类型。