【May Be DNK】JSON.parse() and JSON.stringify()的两个实用技巧

结论

一、数据深拷贝

使用方法:JSON.parse(JSON.stringify(param))

let o = {a: 1, b: 2}
let o1 = JSON.parse(JSON.stringify(o))
let o2 = o

console.log(o === o2) // true
console.log(o === o1) // false

二、数据过滤

对一个对象中的数据进行处理,譬如过滤掉对象中值为null/undefined的键,我们通常会用Object.keys()逐个遍历key

现在,我们可以这样做:

let o = {
    a: 1,
    b: null,
    c: 'hello'
}

let replacer = (k, v) => {if (v) return v})

let s = JSON.stringify(o, replacer)
let res = JSON.parse(s)

> res
< {a: 1, c: "hello"}

// 或者
s = JSON.stringify(o)
res = JSON.parse(s, replacer)

> res
< {a: 1, c: "hello"}

详细介绍

JSON,全称是JavaScript Object Notation(JavaScript 对象表示法),是一种轻量、可读性高的数据结构。

XML类似,它主要用于服务器和web应用之间的数据传输。

键值对(Keys and Values)

构成JSON的两个重要部分是键和值。它们一起组成一个键值对:
Key:一个键通常被一对双引号包裹住。
Value: 有效值是string, number, array, object, null, false, true中的一种(无undefined)。
Key/Value Pair:键值对遵循特定的语法,行如key: value,键值对以逗号分隔。

JavaScript 中的JSON对象有两个方法:parse、stringify,用来处理JSON格式的数据。

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

JSON.stringify() 将一个 JavaScript 对象转化成一个 JSON 字符串。

stringify 函数有两个可选参数:replacer and space.

// converting a simple javascript object to JSON object
let my_details =  {
    "name"  : "John",
    "age "  : "31" ,
    "photo" : "🤪"
}

let my_details_in_json = JSON.stringify(my_details);

// "{"name":"John","age ":"31","photo":"🤪"}" --> my_details_in_json

当然,你也可以转化数组:

let  my_details = ['John ', 31, '🤪'];  

const myJSONdetails = JSON.stringify(my_details);  

// "["John ",31,"🤪"]" --> myJSONdetails

replacer参数可以选择函数或者数组。

作为函数——>Replacer有两个参数:被字符串化的 keyvalue.

// in this example we will convert small letters to capital letters

function replacer(key, value) {
    if (typeof value === 'string') {
        return value.toUpperCase();
    }
    return value;
}

let my_details =   {
    "name"  : "john",
    "age "  : "31" ,
    "photo" : "🤪"
 }

JSON.stringify(my_details, replacer);

> "{"name"  : "JOHN", "age "  : "31" , "photo" : "🤪"}"

作为数组——>Replacer中的值与结果中的key值一一对应,多余的key/value将被剔除。

let replacer = ["name" , "age" ];

let my_details =  {
    "name"  : "john",
    "age"  : "31" ,
    "photo" : "🤪"
};

JSON.stringify(my_details, replacer);

> "{"name": "john", "age": "31"}"

**space **参数结果字符串中的间距,它的值类型为字符串/数字。不常用。

2. JSON.parse(JSONObject,[,reviver] )

此方法用于解析JSON字符串数据为一个JavaScript对象。

// converting a simple javascript object to JSON object

let my_details =  {
    "name"  : "John",
    "age "  : "31" ,
    "photo" : "🤪"
 }

let my_details_in_json = JSON.stringify(my_details);

// "{"name":"John","age ":"31","photo":"🤪"}" --> my_details_in_json

let parsedData = JSON.parse(my_details_in_json);

output 
           "age "  :"31",
           "name"  :"John",
           "photo" :"🤪"

JSON.parse() 可以使用一个函数 (reviver) 作为第二个参数,改变返回对象中的值。

JSON.parse(my_details_in_json , function (key, value) { 
    if (typeof value === ‘string’) { 
        return value.toUpperCase(); 
    } 
    return value; 
 });

参考:

https://www.json.org/

https://medium.com/mindorks/json-parse-and-json-stringify-in-javascript-4de609c19d46

.

posted @ 2018-10-31 10:36  Liaofy  阅读(365)  评论(0编辑  收藏  举报