什么是JSON_如何在javascript中解析和生成

4次阅读

JSON 是轻量级数据交换格式,非编程语言,语法独立于语言但类似 JavaScript 对象字面量;要求双引号、无注释、顶层仅 object 或 array;JSON.parse()严格校验,JSON.stringify()忽略 undefined/function 并丢失类型信息。

什么是 JSON_如何在 javascript 中解析和生成

JSON 不是一种 编程语言,而是一种轻量级的数据交换格式,语法独立于语言,但与 JavaScript 的对象字面量高度相似。它被设计为易读、易解析、易生成,几乎所有现代语言都原生支持 JSON。

JSON 的基本语法规则

JSON 数据必须是字符串形式,且只允许使用双引号包裹键名和字符串值;不允许注释、尾随逗号、undefined、函数、Date 对象或 RegExp 实例。合法的顶层结构只能是 object(花括号)或 array(方括号)。

常见错误包括:

  • 用单引号代替双引号:{'name': 'Alice'} ❌(应为 {"name": "Alice"}
  • 键名没加引号:{name: "Alice"} ❌(JSON 要求所有键必须是双引号字符串)
  • 包含 undefinedfunction():会被 JSON.stringify() 忽略或抛错

JSON.parse():把字符串转成 JavaScript 值

该方法严格校验输入——只要字符串不符合 JSON 语法,就会立即抛出 SyntaxError。不能用于解析任意 JS 对象字面量(比如带单引号或省略引号的)。

立即学习Java 免费学习笔记(深入)”;

实操建议:

  • 始终用 try……catch 包裹,避免未捕获异常导致程序中断
  • 服务端返回的响应体(如 fetch().then(r => r.json()))内部已调用 JSON.parse(),无需重复解析
  • 如果需要处理非标准格式(如带注释的配置),先用正则或专用库清洗,再传给 JSON.parse()
try {const data = JSON.parse('{"user": {"id": 42,"active": true}}');   console.log(data.user.id); // 42 } catch (err) {console.error('解析失败:', err.message); }

JSON.stringify():把 JavaScript 值转成 JSON 字符串

它只序列化可枚举的自有属性,会跳过 undefinedfunctionsymbol 值,以及循环引用的对象(直接抛 TypeError)。

关键参数说明:

  • 第二个参数 replacer 可以是数组(指定白名单字段)或函数(自定义序列化逻辑)
  • 第三个参数 space 控制缩进,传数字(空格数)或字符串(如 "t")用于美化输出
  • 日期对象会被自动转为 ISO 字符串:new Date("2023-01-01")"2023-01-01T00:00:00.000Z"
const obj = {name: "Bob", age: 30, createdAt: new Date() }; console.log(JSON.stringify(obj, null, 2)); // 输出:// {//   "name": "Bob", //   "age": 30, //   "createdAt": "2023-01-01T00:00:00.000Z" //}

容易被忽略的边界情况

实际项目中,最常踩的坑不是语法错误,而是类型 隐式转换 和数据完整性丢失:

  • JSON.stringify(new Date()) 得到字符串,但 JSON.parse() 不会把它变回 Date 对象——需要手动转换
  • JSON.stringify({x: undefined}) 返回 {},字段直接消失,而不是保留 "x": null
  • BigNumber、Map、Set、TypedArray 等无法被原生 JSON.stringify() 处理,需提前转为普通对象或数组
  • 后端 约定的字段名大小写不一致(如后端返回 user_id前端 期望 userId),靠 JSON 本身无法解决,得在解析后做映射

星耀云
版权声明:本站原创文章,由 星耀云 2026-01-07发表,共计1606字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources