侧边栏壁纸
  • 累计撰写 225 篇文章
  • 累计创建 275 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

你不常用的JSON.stringify用法

DGF
DGF
2022-03-16 / 0 评论 / 0 点赞 / 8 阅读 / 0 字

在工作中,你可能经常用 JSON.stringify 来将对象序列化成 JSON 字符串。那么,除了常见的用法,你知道 JSON.stringify 还有哪些其他特性和用法吗?接下来,我们一起来看看。

如果你还想了解一些 JSON.parse 的其他用法,可以参考《你不常用的JSON.parse的用法》这篇文章。

语法

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

从语法上来看,value 是我们常用的参数,replacerspace 这两个参数较少使用,或者有些人基本没用过。

我们来看一个例子:

const person = {
    id: 3508,
    name: 'DGF',
    age: 30,
    address: {
        city: 'xm',
    },
    arr: [1, 2, 3]
}

1. 用来序列化对象

默认情况下,JSON.stringify(obj) 会输出一行字符串:

console.log(JSON.stringify(person));

2. 格式化输出

你可以使用 space 参数来控制 JSON 字符串的格式化,space 表示每个字符的间距,用来控制每行的缩进。

  • 4 表示空格缩进:
console.log(JSON.stringify(person, null, 4));
  • 使用自定义字符串作为缩进:
console.log(JSON.stringify(person, null, '....'));

3. 筛选属性

replacer 参数可以是一个数组或函数。函数接收两个参数 keyvalue,其作用是可以选择哪些属性需要被序列化,哪些需要被隐藏。

  • 筛选需要序列化的属性:
let test1 = JSON.stringify(person, (key, value) => {
    if(key == 'id' || key == 'age') {
        return;
    }
    return value;
});
console.log(test1);
  • 筛选值为 number 类型的属性:
let test2 = JSON.stringify(person, (key, value) => {
    if(typeof value == 'number') {
        return;
    }
    return value;
});
console.log(test2);
  • 使用一个函数过滤多个属性:
function stripKeys(...keys) {
    return (key, value) => {
        if(keys.includes(key)) {
            return;
        }
        return value;
    };
}
console.log(JSON.stringify(person, stripKeys('arr', 'address')));
  • 只序列化需要的属性(数组):
console.log(JSON.stringify(person, ['name', 'address', 'city']));

4. 数组筛选

你也可以用 JSON.stringify 来筛选数组中需要的元素。

const person1 = [{
    id: 1,
    name: 'a',
    age: 12,
    arr: ['a', 'b', 'c']
}, {
    id: 2,
    name: 'b',
    age: 22,
    arr: ['aa', 'bb', 'cc']
}];

console.log(JSON.stringify(person1, ['id', 'age']));

5. 判断数组/对象是否包含某对象

你可以使用 JSON.stringify 判断一个对象是否包含在数组中。

const person2 = {
    id: 2,
    name: 'b',
    age: 22,
    arr: ['aa', 'bb', 'cc']
};

console.log(JSON.stringify(person1).indexOf(JSON.stringify(person2)) !== -1); // true

const p3 = {
    a: 1,
    b: 2,
    c: {
        d: 5
    }
};

const p4 = {
    d: 5,
};
console.log(JSON.stringify(p3).indexOf(JSON.stringify(p4)) !== -1); // true

6. 判断数组是否相等

通过 JSON.stringify,你也可以判断两个数组是否相等:

let arr1 = ['a', 'b'];
let arr2 = ['a', 'b'];
console.log(JSON.stringify(arr1) === JSON.stringify(arr2)); // true
0

评论区