JSON.parse与eval区别

两种方式都可以解析json字符串,不过有时候JSON.parse解析会失败,失败原因有多种,下面会指出一种。

 

JSON.parse()解析json格式的数据,会对要解析的字符串进行格式检查,如果格式不正确则不进行解析,

eval()则可以解析任何字符串,但是eval是不安全的(不安全原因在下面)。

 

注意:某些低级的浏览器尚不支持JSON.parse(),可以到 https://github.com/douglascrockford/JSON-js/blob/master/json2.js 下载。

 

使用eval函数,解析json字符串

var dataObj = eval(“(“+json+”)”);

加上圆括号的目的是,迫使eval函数在处理JavaScript代码时,强制将括号内的表达式(expression)转化为对象,而

不是作为语句(statement)来执行。

 

注意:使用eval函数解析JSON是一种很不安全的方式,能不用最好就不用,原因是eval不但可以解析JSON字符串,还会执行其中的代码块(如果有的话)

 

使用JSON.parse()方法解析 

var dataObj = JSON.parse(json);

注意:JSON.parse()又是對字符串的真实含义进行解析,要表示 \ 必須要用"\\\\"表示。

 

使用JSON.parse()解析会报错的一种情况:

复制代码
  var Student = {  
                age: "20",  
                sex:"male"  
            };
//错误做法
alert(JSON.parse(Student).age);//JSON.parse()不能直接解析对象


//正确做法
var jsonStr=JSON.stringify(Student); alert(JSON.parese(jsonStr).age);
复制代码

有时候

 

 

 

 

题外话:

JSON是Javascript原生格式,这意味着在javascript中处理JSON数据不需要任何特殊的API或工具包,而且效率非常高。

 

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", "20", "male", "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, function (key, 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", "age", "sex", "location"];  
            var jsonperson = JSON.stringify(person, null, "hi");  
            alert(jsonperson);  
复制代码

上面的例子复制自文章:

标题:eval、JSON.parse和JSON.stringify;

地址:http://blog.csdn.net/u011872945/article/details/38664405

 

posted on   荆棘人  阅读(469)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示