JSON.stringify与JSON.parse详解与实践

目录

JSON.stringify

简介

主要用途:

API

实践1:

实践2:

JSON.parse

简介

API

实践1

实践2


JSON.stringify

简介

用于把JavaScript对象、数组、值、布尔值等序列化成字符串形式。

主要用途:

得到的数据通常有以下主要用途:

数据传输:在客户端和服务器之间传递数据时,通常需要把数据序列化为字符串进行传输。JSON是一种常见的数据交换格式,而JSON.stringify 可以很方便的将javascript 的对象等数据转换成JSON字符串,以便在网络上传输。

本地存储: 在浏览器端,localStoragesessionStorage 存储的数据必须是字符串形式。JSON.stringify 可以用来将 JavaScript 对象转为字符串,以便在本地存储中使用。

保存数据: 将数据存储到本地文件或数据库时,经常需要将数据转为字符串形式。JSON 格式的字符串是一个通用的选择,而 JSON.stringify 可以用来生成符合标准的 JSON 字符串。

JSON.stringify() - JavaScript | MDN

API

JSON.stringify(value: any, replacer?: (string | number)[] | null | undefined, space?: string | number | undefined): string

实践1:

const data = {
  key1: 'value1',
  key2: 'value2',
  key3: {
    subKey1: 'subValue1',
    subKey2: 'subValue2'
  }
};
//改变内容,把所有的value值变为大写
const jsonString = JSON.stringify(data, (key, value) => {
  // 使用 replacer 函数,将所有字符串值转为大写
  if (typeof value === 'string') {
    return value.toUpperCase();
  }
  return value;
}, 2);  // 使用缩进为2的空格

console.log(jsonString);

实践2:

const data = {
  key1: 'value1',
  key2: 'value2',
  key3: {
    subKey1: 'subValue1',
    subKey2: 'subValue2'
  }
};

//不改变内容,缩进4空格,便于阅读
const jsonString = JSON.stringify(data, null, 4);  // 使用缩进为4的空格

console.log(jsonString);

JSON.parse

简介

将JSON的字符串转换为 JavaScript的 对象。需要注意 必现符合JSON字符串格式的数据才行。

JSON.parse() - JavaScript | MDN

API

JSON.parse(text: string, reviver?: ((this: any, key: string, value: any) => any) | undefined): any

实践1

const jsonString = '{"name": "John", "age": 30, "city": "New York"}';

const reviver = (key, value) => {
  // 将 age 属性的值加倍
  if (key === 'age') {
    return value * 2;
  }
  return value;
};

const parsedObject = JSON.parse(jsonString, reviver);

console.log(parsedObject);
// 输出: { name: 'John', age: 60, city: 'New York' }

实践2

const jsonString = '{"name": "John", "age": 30, "city": "New York"}';


const parsedObject = JSON.parse(jsonString);

console.log(parsedObject);
// 输出: { name: 'John', age: 30, city: 'New York' }

<think>嗯,用户想了解JSON.stringify的功能和用法。首先,我需要回忆一下这个方法的基本作用。JSON.stringify主要用于将JavaScript对象或值转换为JSON格式的字符串,这在数据交换或者存储时非常常见。比如,当需要将数据发送到服务器时,通常会先将对象转换成JSON字符串。 接下来,我得整理它的语法结构。根据引用中的资料,它的语法是JSON.stringify(value[, replacer[, space]])。这里三个参数分别是value、replacer和space。value是必须的,而replacer和space是可选的。Replacer可以是函数或者数组,用来控制哪些属性被序列化。Space用来美化输出,控制缩进。 然后,我需要考虑用户可能需要的使用示例。比如基本转换,处理循环引用,使用replacer函数过滤属性,以及自定义toJSON方法的情况。这些例子能帮助用户更好地理解不同的使用场景。 用户可能还会关心一些常见问题,比如处理日期对象、忽略某些属性、处理循环引用,以及性能方面的注意事项。比如,引用[2]提到用JSON.parse(JSON.stringify(obj))进行深拷贝,但可能存在性能问题。另外,引用[3]指出可以通过实现toJSON方法来自定义序列化过程,这对处理特殊对象很有用。 同时,需要注意JSON.stringify的局限性,比如不能序列化函数、undefined等类型,以及如何处理这些情况。可能还需要提到第三个参数space的使用,比如缩进2个空格让输出更易读。 最后,要确保回答结构清晰,分点说明,并给出示例代码。还要生成相关问题,帮助用户进一步学习。例如,处理特殊数据类型、性能优化、深拷贝的替代方案等。这些相关问题可以引导用户深入理解JSON.stringify的应用和限制。</think>### JSON.stringify 的功能和用法详解 #### 一、核心功能 JSON.stringify 是 JavaScript 中用于将 **对象或值** 转换为 JSON 格式字符串的方法,常用于: 1. 数据存储(如 localStorage) 2. 网络传输(AJAX 请求) 3. 对象深拷贝(需配合 JSON.parse)[^2] #### 二、语法结构 $$JSON.stringify(value[, replacer[, space]])$$[^1][^4] - **value**:必选,待转换的 JavaScript 值 - **replacer**:可选,控制序列化行为的函数/数组 - **space**:可选,美化输出的缩进字符(最大缩进 10) #### 三、使用示例 1. **基本转换** ```javascript const user = { name: 'Alice', age: 25 }; console.log(JSON.stringify(user)); // {"name":"Alice","age":25} ``` 2. **处理循环引用** ```javascript const obj = { a: 1 }; obj.self = obj; // 会抛出 TypeError,需自行处理循环引用 ``` 3. **replacer 函数过滤属性** ```javascript const data = { id: 1, pwd: 'secret', role: 'admin' }; const filtered = JSON.stringify(data, (key, val) => key === 'pwd' ? undefined : val ); // {"id":1,"role":"admin"} ``` 4. **自定义序列化(toJSON 方法)** ```javascript class CustomDate { constructor() { this.date = new Date() } toJSON() { return this.date.toISOString() } } console.log(JSON.stringify(new CustomDate())); // "2023-07-20T12:34:56.789Z" ``` #### 四、特殊处理场景 | 数据类型 | 处理结果 | 解决方案 | |-----------------|-----------------------|------------------------------| | `undefined` | 被忽略 | 使用 replacer 转换 | | `Function` | 被忽略 | 手动转换为字符串 | | `Date` | 转为 ISO 字符串 | 自动处理 | | `Infinity` | 转为 `null` | 使用 replacer 替换 | #### 五、性能注意事项 1. 大数据量时慎用 `JSON.parse(JSON.stringify())` 深拷贝[^2] 2. 循环引用会导致序列化失败 3. 类型丢失问题(如 Date 转为字符串)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值