欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JSON字符串--对象之间的相关转换

程序员文章站 2022-05-01 11:03:48
...

一、 JSON.parse 方法

将json串转换成object对象,然后能够用.获取属性值。

var b='{"title":"编号管理","parentName":"装备管理"}';var c=JSON.parse(b);console.log(c);

结果如下图

JSON字符串--对象之间的相关转换

你的字符串必须符合JSON格式,即键值都必须使用双引号包裹,单引号不行,例如:

JSON字符串--对象之间的相关转换

二、 JSON.stringify 方法

基本用法:一个对象通过stringify之后变成字符串

var data =[
{
    name: "程才",sex:"0",age:20
},
{
    name: "程新松",sex:"1",age:22    
},
{
    name: "程功",sex:"1",age:18    
}
];
console.log(data);
var str_json = JSON.stringify(data);
console.log(str_json,'字符串');

 

结果如下图

JSON字符串--对象之间的相关转换

 

  • 1、方法的定义
  • 2、JSON.stringify提供了参数分离出自己需要的那部分数据
  • 3、JSON.stringify提供了参数回调函数做一个映射关系
  • 4、JSON.stringify提供了参数格式化字符串

1、方法的定义

JSON.stringify ( value [, replacer] [ , space] )

参数:

(1)value:必选,要转换的值(包括所有的数据类型,通常是对象或者数组)

(2)replace:可选,用于要转换结果的函数或者数组;如果replace是数组,仅仅是转换具有该键值的成员,成员的转换顺序和键在数组中的顺序一致;如果replace是函数,会传入每一个成员的键和值,使用的是返回值而不是原始值,如果函数返回的是undefined,则排除该成员。查看了JSON2的源码,

 rx_escapable.lastIndex = 0;
        return rx_escapable.test(string)
            ? "\"" + string.replace(rx_escapable, function (a) {
                var c = meta[a];
                return typeof c === "string"
                    ? c
                    : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
            }) + "\""
            : "\"" + string + "\"";
    }

 

 确认并不会传入每个成员的键和值,而仅仅以空字符串形式调用replacer函数。该函数的实质是自定义的用于转化为JSON字符串的函数。

 (3)space:可选, 向返回值JSON 文本添加缩进、空格和换行符以使其更易于读取。

 如果省略space,则将生成返回值文本,而没有任何额外空格。

 如果 space是一个数字,则返回值文本在每个级别缩进指定数目的空格。 如果 space 大于 10,则文本缩进 10 个空格。

 如果 space是一个非空字符串(例如“\t”),则返回值文本在每个级别中缩进字符串中的字符。

 如果 space 是长度大于 10个字符的字符串,则使用前 10 个字符。

 

2、JSON.stringify提供了分离出自己需要的那部分数据

比如说这个场景,我们的数据非常的复杂,有类似头像,昵称,个人签名等,可是我保存在本地,只需要用户名,性别,怎么搞?

方法一:可以用遍历数组重新提取一下

var data =[
{
    name: "程才",sex:"0",age:20
},
{
    name: "程新松",sex:"1",age:22    
},
{
    name: "程功",sex:"1",age:18    
}
];for(var i=0,new_data=[];i<data.length;i++){
    new_data.push({
        name: data[i].name,
        sex: data[i].sex
    });
}
var str_json = JSON.stringify(new_data);
console.log(str_json);
VM764:18 [{"name":"程才","sex":"0"},{"name":"程新松","sex":"1"},{"name":"程功","sex":"1"}]

 

JSON字符串--对象之间的相关转换

方法二:的确可以这么干,但是JSON.stringify提供了参数分离出自己需要的那部分数据

var str_json = JSON.stringify(data,["name","sex"]);
console.log(str_json);
 

第二个参数只要传入需要的keys数组,就非常轻松的处理这个,结果如下:

JSON字符串--对象之间的相关转换

 

 3JSON.stringify提供了回调函数做一个映射关系

比如说,我们把sex里的1,0修改为男,女 ,那么第二个参数可以通过回调函数来处理这个映射关系。

var str_json = JSON.stringify(data,function(key,value){
    if(key == 'sex'){
        return ["女",'男'][value];
    }
    return value;
});
console.log(str_json);

 

 

第二个参数很厉害,省去了不少的麻烦,结果如图:

JSON字符串--对象之间的相关转换

 

4、JSON.stringify提供了参数格式化字符串

第三个参数,用于格式化字符串 

var str_json = JSON.stringify(data,null,'\t');
console.log(str_json);
var str_json = JSON.stringify(data,['name','sex'],'\t');
console.log(str_json);

JSON字符串--对象之间的相关转换

5、JSON.stringify的妙用-判断数组中是否包含某对象,或判断对象是否相等

let data = [
    {name:'echo'},
    {name:'听风是风'},
    {name:'天子笑'},
    ],
    val = {name:'天子笑'};
JSON.stringify(data).indexOf(JSON.stringify(val)) !== -1;//true

    val1 = {name:'天笑'};
JSON.stringify(data).indexOf(JSON.stringify(val1)) !== -1;//false


let i = [1,2,3],
    b = [1,2,3];
JSON.stringify(i) === JSON.stringify(b);//true

 

相关标签: js