关于JSON.stringify和JSON.parse

1.JSON.parse()
先看如下:

image.png

可以得出:如果我们想要直接用JSON.parse()把字符串转成object,字符串的格式必须是:

'{"name":"张三","age":18}'//key值必须要用双引号包着,value如果是数字则不用

再看下图:

image.png

若里面有引号包着的内容,必须要这样转义。
如果碰到上面格式,想转成object,可以用eval()
eval("("+str+")");
看下图:
image.png

不管是单引号包着双引号,还是双引号包着单引号,不管key值有没有用引号包着都是OK的。
注意这里面的括号是非常重要的:
image.png

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

var obj = {a:1};
var obj1 = eval("( {a:1} )");
eval("var obj2 = {a:1}");
//这三个obj是一样的

除了使用eval()方法以外,还可以使用如下函数,也是都OK的

function toJSON(str){
    return ( new Function ("return"+str) )();
}

注意:在代码中使用eval是很危险的,特别是用它执行第三方的JSON数据(其中可能包含恶意代码)时,比如'{"name":window.location.href="aaa"}'就会直接跳转到aaa去了。所以建议尽可能使用JSON.parse()方法解析字符串本身(虽然对数据要求严格,但是他安全)。

另外,JSON.parse()里面可以跟两个参数,第一个参数是一个JSON字符串必填,第二个是一个函数,可选,(一个转换结果的函数, 将为对象的每个成员调用此函数。)如:

image.png

从上可看出,最后一个k为"",这点需要注意下。

JSON.parse('{"1": 11, "2": 22}', function(k, v) {
    if(k!==''){
        console.log('k:'+k);
        console.log('v:'+v);
    }
});

2.JSON.stringify()
常用的就不说了,下面说说它的另外两个参数:
第二个参数若为数组。

var json={
    a:"qq",
    b:2,
    c:"vv"
}
console.log(JSON.stringify(json,["a","b"]));
// {"a":"qq","b":2}//过滤掉 键名不为 a或者b 的key

第二个参数若为函数

var arr=[
    {"name":"a","age":10,"sex":0},
    {"name":"b","age":11,"sex":1},
    {"name":"c","age":12,"sex":2}
]
var str1=JSON.stringify(arr, function(key, value){
    if(key != 'age') return value;
});
console.log(str1);//过滤掉age
//[{"name":"a","sex":0},{"name":"b","sex":1},{"name":"c","sex":2}]
var arr=[
    {"name":"a","age":10,"sex":0},
    {"name":"b","age":11,"sex":1},
    {"name":"c","age":12,"sex":2}
]

var str2=JSON.stringify(arr, function(key, value){
    if(key == 'sex') return ["男","女"][value]?["男","女"][value]:value;
    else return value;
});
console.log(str2);//用男女替换性别01
// [{"name":"a","age":10,"sex":"男"},{"name":"b","age":11,"sex":"女"},{"name":"c","age":12,"sex":2}]

第三个参数(实际用处暂时不知道)

var json={
    a:"qq",
    b:2,
    c:"vv"
}
console.log(JSON.stringify(json));
console.log(JSON.stringify(json, null, 10));
console.log(JSON.stringify(json, null, 'hello'));
//数字表示缩进量(最多10个空格,大于10也只缩进10个),字符则表示填充字符

结果如下:


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,215评论 0 13
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,272评论 0 4
  • 随着HTML5的发展。虽然有很多人这几年都写了很多关于HTML的文章,但好像很少有提供关于HTML5能够影响有机的...
    大笑一声阅读 543评论 0 1
  • 01、茶性:口感的刺激性。包括香型和苦涩度,常用“强、弱”来形容。 02、茶质:汤质在口腔中的饱满度。包括滑度、甜...
    茶耕阅读 831评论 0 1
  • 小新从小就很爱唠嗑,平常总喜欢去人多的地方,最喜欢的是家里院子内的大白杨下麻将间,虽说他还小但是总是和那些叔叔大娘...
    真小左阅读 186评论 0 0