0

0

javascript如何操作JSON数据?_如何进行JSON字符串和对象的相互转换?【教程】

狼影

狼影

发布时间:2026-01-29 01:45:27

|

920人浏览过

|

来源于php中文网

原创

JSON.parse()报错Unexpected token主因是传入非字符串值;JSON.stringify()静默丢失undefined/function/Symbol等;response.json()自动解析但不校验Content-Type;日期、BigInt、类需自定义序列化协议。

javascript如何操作json数据?_如何进行json字符串和对象的相互转换?【教程】

JSON.parse() 报错:Unexpected token 是怎么回事?

绝大多数 JSON 解析失败都卡在这一步,错误信息像 Unexpected token u in JSON at position 0Unexpected token o in JSON at position 1,本质是传给了 JSON.parse() 一个非字符串值——比如直接传了对象、undefinednull,甚至已经解析过的对象。

常见踩坑点:

  • 误把 response.data 当成字符串(实际已是对象),又套一层 JSON.parse(response.data)
  • 接口返回空响应或 404,response.text() 得到空字符串 ""JSON.parse("") 必炸
  • 后端返回的是带 BOM 的 UTF-8 字符串,开头有不可见字符,导致解析失败

安全写法:先判断类型再解析

function safeParse(jsonStr) {
  if (typeof jsonStr !== 'string') return null;
  try {
    return JSON.parse(jsonStr);
  } catch (e) {
    console.warn('JSON parse failed:', e.message);
    return null;
  }
}

JSON.stringify() 为什么有时不报错但结果为空或丢失字段?

JSON.stringify() 对值的序列化有明确规则,不是所有 JS 值都能被保留。

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

典型静默丢失场景:

RecoveryFox AI
RecoveryFox AI

AI驱动的数据恢复、文件恢复工具

下载
  • undefinedfunctionSymbol 类型的键或值会被直接忽略(连报错都没有)
  • Date 对象变成 ISO 字符串,RegExp 变成空对象 {}
  • 循环引用(如 obj.a = obj)会直接抛 TypeError: Converting circular structure to JSON
  • Map / Set / ArrayBuffer 等原生类型不支持,需手动转换

若需保留特殊结构,必须用 replacer 参数干预:

const obj = { time: new Date(), fn: () => {}, x: undefined };
JSON.stringify(obj, (key, value) => {
  if (value instanceof Date) return value.toISOString();
  if (typeof value === 'function') return value.toString();
  return value; // 其他照常
});
// → {"time":"2024-05-20T12:34:56.789Z","fn":"() => {}"}

fetch 返回的 response.json() 和手动 JSON.parse() 有什么区别

response.json()浏览器原生方法,它内部调用 JSON.parse(),但做了两件事:

  • 自动读取 response body 流(等价于 response.text().then(text => JSON.parse(text))
  • 如果响应头 Content-Type 不含 application/json,**不会报错**,仍尝试解析(这点常被忽略)

所以不能靠 Content-Type 是否为 application/json 来判断数据是否合法。真正可靠的判断方式仍是解析后的值类型:

fetch('/api/user')
  .then(r => r.json())
  .then(data => {
    if (data && typeof data === 'object' && !Array.isArray(data)) {
      // 至少是个对象,可继续处理
      console.log(data.id);
    } else {
      throw new Error('Invalid JSON structure');
    }
  });

JSON 转换时日期、BigInt、自定义类怎么保真?

标准 JSON 规范不支持 DateBigIntundefined、正则、函数、class 实例等。想保真传输,必须约定序列化协议。

  • BigInt:必须显式转成字符串(String(123n)),接收方再 BigInt(str);否则 JSON.stringify(123n) 直接报错
  • Date:建议统一用 ISO 字符串(date.toISOString()),后端/前端都按字符串解析
  • 自定义类:无法自动还原,需在对象上加标识字段(如 {"type": "User", "name": "Alice"}),再用工厂函数重建实例

没有银弹。所谓“保真”,本质是前后端对序列化规则达成一致,而不是依赖 JSON.stringify 默认行为。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

418

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

535

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

311

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

77

2025.09.10

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

443

2023.08.02

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

236

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

458

2024.03.01

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6169

2023.09.14

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

158

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.3万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号