fayeah / blogs

方法论、问题驱动、总结
6 stars 0 forks source link

【JS】详谈JSON.stringify() #12

Open fayeah opened 4 years ago

fayeah commented 4 years ago

JSON.stringify()是将Object转换成为JSON形式的函数,用起来也最直接,比如

JSON.stringify({'key': 'value'})

便可以直接转换为'{"key":"value"}'。这是我们常用的方式,但是它有更多的用法和要注意的事项,一起来看一下。

JSON.stringify()可以转换哪些数据类型:

JSON.stringify()的replacer参数

JSON.stringify()的space参数

符合语法规则的JSON.stringify()

像unicode这些在转换的时候似乎已然会打印出不太友好的text,JSON.stringify("\uD800"), '�',但有了well-formed的实现,就可以得到相应的转义序列:现在的返回结果是'\\ud800',但目前还不支持IE

自定义toJSON,我们可以定义toJSON,来改变stringily的行为:

var obj = {
    data: 'data',

    toJSON (key) {
        if (key)
            return `Now I am a nested object under key '${key}'`;
        else
            return this;
    }
}

有了这样的一个object,那么JSON.stringify(obj);, JSON.stringify({ obj });JSON.stringify([ obj ]);的结果分别是:

JSON.stringify(obj);
// '{"data":"data"}'

JSON.stringify({ obj }); // Shorthand property names (ES2015).
// '{"obj":"Now I am a nested object under key 'obj'"}'

JSON.stringify([ obj ]);
// '["Now I am a nested object under key '0'"]'