关键词:手写 JSON.stringify、手写 JSON.parse
手写JSON.stringify
JSON.stringify
是一个将 JavaScript 对象或值转换为 JSON 字符串的函数。下面是一个简化的实现,主要考虑以下几种类型:字符串、数字、布尔值、对象和数组。
1function jsonStringify(value) {
2 const type = typeof value;
3
4 if (type === 'string') {
5 return `"${value}"`;
6 }
7
8 if (type === 'number' || type === 'boolean' || value === null) {
9 return String(value);
10 }
11
12 if (type === 'object') {
13 if (Array.isArray(value)) {
14 const arrayItems = value.map((item) => jsonStringify(item)).join(',');
15 return `[${arrayItems}]`;
16 } else {
17 const objectKeys = Object.keys(value);
18 const objectItems = objectKeys.map((key) => {
19 const keyValue = jsonStringify(value[key]);
20 return keyValue !== undefined ? `"${key}":${keyValue}` : undefined;
21 }).filter((item) => item !== undefined).join(',');
22 return `{${objectItems}}`;
23 }
24 }
25
26 return undefined; // 这里省略了对函数、Symbol、循环引用等类型的处理
27}
28
29// 使用示例
30const obj = {
31 a: "hello",
32 b: 42,
33 c: true,
34 d: { e: "world", f: [1, 2, 3] },
35};
36
37console.log(jsonStringify(obj)); // {"a":"hello","b":42,"c":true,"d":{"e":"world","f":[1,2,3]}}
请注意,这个实现有很多限制,适用于简单场景。它没有处理循环引用、函数、Symbol
类型等复杂情况。实际项目中,你还是应该使用内置的 JSON.stringify
函数。
手写 JSON.parse
JSON.parse
是一个将 JSON 字符串转换为 JavaScript 对象或值的函数。手写一个简化版的 JSON.parse
可能不会涵盖所有的细节和兼容性问题,这里提供一个基于 JavaScript 的 eval 函数实现的简单版本。请注意,在实际项目中应使用原生的 JSON.parse
函数以保证安全性和性能。
1function jsonParse(jsonString) {
2 return eval("(" + jsonString + ")");
3}
4
5// 使用示例
6const jsonString = '{"a": "hello", "b": 42, "c": true, "d": {"e": "world", "f": [1, 2, 3]}}';
7
8console.log(jsonParse(jsonString));
9/* 输出:
10{
11 a: "hello",
12 b: 42,
13 c: true,
14 d: { e: "world", f: [1, 2, 3] },
15}
16*/
虽然使用 eval
函数能简单地实现 JSON 字符串的解析,但在实践过程中使用 eval
并不安全,因为它会执行任意字符串中包含的 JavaScript 代码。因此,强烈建议实际项目中使用 JSON.parse
和 JSON.stringify
函数。
个人笔记记录 2021 ~ 2025