关键词:手写 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.parseJSON.stringify 函数。

个人笔记记录 2021 ~ 2025