“JSON 在 AI 时代正走向消亡”——我最近刷到这个说法的时候正好在处理一个线上事故我们的 AI 编排服务里模型吐回来的 JSON 字段多了一个换行导致下游 Java 服务直接json parse error。热搜词里也全是“json parse error: cannot deserialize value of type java.util.date from str”“json查询函数”“json转字符串”。一边是“消亡论”一边是全网在加班处理 JSON 的报错这两件事放在一起本身就挺有意思。我在 AI 工程这条线上干了一年多和 JSON 打交道的时间一点都不比做传统后端时少唯一的变化是以前 JSON 是我写的现在是 AI 写的、我来擦屁股。所以我想把“消亡”这件事拆开聊聊——它到底死的是哪一部分又在哪里换了件马甲继续发光发热。如果你正在做 AI Agent、自动化脚本、数据处理管道或者只是经常调用大模型 API这篇文章值得看完。它不会给你灌“JSON 将死”的焦虑反而会告诉你JSON 在 AI 时代获得了一个新身份AI 与外部系统之间的翻译官。理解了这层你手里的 JSON 技能不但没过时反而更值钱。1. 热搜词里的反向证据JSON 没死只是换了岗位先别急着聊理论我们直接看数据。我翻了翻最近围绕这个话题的热搜词排在前面的不是“JSON 已死”而是下面这类热搜词背后真实场景json格式 / json用什么打开文件查看与交换JSON 依旧是通用数据语言json数组 / json转字符串 / json序列化工具开发调试、接口联调、对象序列化的日常json parse errorjava.util.dateJava 后端反序列化时的类型匹配问题spark中读取json / pg json函数技巧 / json查询函数大数据处理、数据库查询都离不开 JSONblender如何导出json / json转shp网站3D 资产交换、GIS 地理数据的标准中转格式书源合集json / 2026最新音源json / json影视源接口内容配置以 JSON 文件形式在社区传播import json, torch / json 序列化工具Python 生态里最基础的 IO 操作这个表格说明了一件事JSON 在工程层面不但没有消亡反而渗透到了更多领域。那为什么“JSON 在 AI 时代正走向消亡”这种说法会有市场我琢磨了很久核心原因是AI 把自然语言变成了“第一接口”。以前写代码你从后端拿数据JSON 结构必须事先约定好否则前端没法渲染。现在呢你跟大模型说“帮我查一下北京的天气”模型自己决定调用哪个工具、返回什么结构中间那段 JSON 构造与解析被藏起来了。从使用者的视角看JSON 仿佛是消失了。但这只是感知层面的消失。在系统内部function calling 的请求体是 JSON工具参数的 schema 是 JSON Schema返回结果还是 JSON。自然语言只是门面JSON 是地基。用一个不太严谨的类比你点外卖用 App 下单不需要看到后厨是怎么炒菜的但不能说厨师这个职业消亡了。JSON 就是 AI 世界的“后厨”AI 越智能后台需要处理的 JSON 反而越多、越复杂。你从热搜词里看不到“消亡”只能看到“大家都在花式处理 JSON”。所以第一个结论消亡的不是 JSON而是你肉眼可见 JSON 的那部分场景。2. AI 逼出来的三种新形态JSONL、Structured Output 与流式残片如果只是说“JSON 没死”那这篇文章没多大价值。真正值得关注的是AI 这波浪潮把 JSON 的使用方式硬生生改写了。我在这段实践里观察到三种最明显的新形态每一种都对应着新的技术栈和踩坑点。2.1 JSONLAI 数据喂养的标准流水线传统 JSON 是一个完整的树形结构一个文件代表一份数据。AI 时代的数据集则普遍采用 JSONLJSON Lines格式每一行独立一个 JSON 对象行与行之间没有任何分隔符问题。为什么选 JSONL因为训练和微调的数据量太大了。一个 10GB 的 JSON 数组文件你要先整体 parse 才能拿到数据内存直接爆掉JSONL 则可以按行读取、增量追加、断点续读处理到哪一行出错只丢那一行不影响整体。以 Python 生态为例我现在处理微调数据基本都是这个套路import json from datasets import Dataset rows [] with open(train.jsonl, r, encodingutf-8) as f: for line in f: line line.strip() if line: rows.append(json.loads(line)) dataset Dataset.from_list(rows)这不是什么高深技巧但很能说明趋势同一个目标数据现在被你拆成几百万行 JSONL 来喂给模型。最近一些大模型厂商公开的智能体训练新方法里预处理脚本的核心输出就是排好序、去好重的 JSONL。JSON 非但没死反而成了 AI 数据管线的默认底座。2.2 Structured Output从“数据格式”升级为“接口契约”传统 JSON 的约定是前后端开发者在接口文档里口头规定的。但在 AI 场景里如果让模型自由发挥返回 JSON你会得到千奇百怪的结果字段名对不上、值类型不对、多一个少一个字段。这时候需要把 JSON 升级为可校验的“契约”。主流大模型 API 现在都支持 Structured Output也就是在请求里显式声明 JSON Schema强制模型按约束输出。拿 OpenAI 官方的 JSON Schema 写法举例from openai import OpenAI client OpenAI() completion client.chat.completions.create( modelgpt-4o, messages[{role: user, content: 提取订单信息}], response_format{ type: json_schema, json_schema: { name: order_info, strict: True, schema: { type: object, properties: { order_id: {type: string}, amount: {type: number}, items: {type: array, items: {type: string}} }, required: [order_id, amount, items] } } } )这个东西的价值对 AI Agent 来说是“安全底线”。Agent 通过 function calling 调工具工具参数就是 JSON一旦模型输出不合法工具调用直接失败整个链路崩溃。有了 Schema 约束至少你能确保模型不会把一个字符串塞进数值字段。我在实际项目中的体会是Schema 设计得好不好直接决定 AI 应用的上线速度。它不再是后端开发者的私有话题而是每个做 AI 应用的人必须掌握的技能。2.3 流式输出把好端端一个 JSON 切成了“半成品”这是我在 AI 场景里遇到的最大的 JSON 挑战也最容易被“消亡论”带偏。大模型 API 默认流式返回你从 SSE 里收到的是一个个 token 碎片。第一帧可能是{第二帧order_id: A100第三帧86, amount:如果你在收到前两帧时就用JSON.parse必挂。很多新人第一次对接 AI 接口十个里有九个栽在这里然后得出一条错误结论“AI 生成的 JSON 不靠谱”。其实不是不靠谱是你没理解流式 JSON 的形态。我的处理思路是在客户端攒缓冲等流结束再统一解析。简单实现let buffer ; stream.on(data, chunk { buffer chunk; // 注意不要在这里 JSON.parse(buffer)因为 buffer 不完整 }); stream.on(end, () { const data JSON.parse(buffer); // 后续逻辑 });代价是延迟但换来的是稳定。如果想拿到“半成品”也能解析就得用增量 JSON 解析器比如partial-json-parser它能把残缺的 JSON 尝试解析成可访问的中间对象。这种能力在渲染流式 UI 时非常有用。但请记住增量解析是锦上添花攒缓冲整体解析才是兜底方案。别把结果渲染玩出了花结果下游接口全部 500。这三种新形态一摆出来你应该能感受到JSON 不是死了而是活得比以前更复杂了。3. “消亡论”传递的三个真信号别会错意虽然我不认同“JSON 消亡”但这个说法能火背后确实有值得重视的信号。我把它拆成三点每一点都指向工作方式和技能结构的真实变化。3.1 手写 JSON 的岗位在消失但设计 JSON 的话语权变大了几年前写一份 mock 数据、手填配置文件、在接口文档里排版 JSON 示例是后端工程师的基本功也是不少初级开发每天的主要工作。现在这些活丢给 AI 一句话就能完成——甚至会给你生成带注释、带示例、能直接拿去跑通的版本。这是好事把我从重复劳动里解放出来了。但我们团队很快就发现AI 生成的 JSON 质量取决于你给它定义的 Schema 和约束条件。你给它的 schema 越清晰它生成的 JSON 越可靠你给它的 schema 模糊它就像喝醉了一样自由发挥。换句话说初级的“写 JSON”在消失高级的“定义 JSON 结构”在变成更核心的技能。以前你需要知道怎么写name: 张三现在你需要知道这个字段是否必填允许 null 吗时间戳是秒还是毫秒数组最多几条这些决策直接影响下游所有系统话语权比以前大得多。3.2 “人类可读性”被重新定义传统 JSON 设计讲究“可读性”字段名要见名知义嵌套不要太深最好人能直接看懂。但从 AI 场景里我发现新的优先级变了可校验性、可约束性、可工具化。大模型不需要“人读得舒服”它需要的是结构无歧义。比如你定义日期字段如果允许“2025-01-01”和“2025/01/01”同时出现对人来说都能看懂但对 AI 和下游系统来说就是灾难。所以现在设计 JSON 时第一个问题不再是“这样读起来顺不顺眼”而是“这个字段值域是什么允许哪些格式能不能被 Schema 强约束”。这不是说可读性不重要了而是它在 AI 时代的权重被降低了。3.3 JSON 在垂直领域的地位比你想的更根深蒂固说 JSON 会消亡很多时候是因为大家只盯着聊天机器人看。但你往具体行业里看JSON 比十年更普及大数据Spark 里from_json、to_json是日常函数半结构化日志几乎全是 JSON。数据库PostgreSQL 的 jsonb 类型加函数索引能让查询变得极其灵活社区里积累了大把 json 查询函数技巧。3D 与 GISBlender 导出 JSON 做资产交换JSON 转 SHP 做地理信息处理都是标准流程。内容分发书源、音源、影视源这类配置至今仍以 JSON 文件方式在社区里分享一个合集 JSON 就是一套可复用的资源包。这些行业的共同点是排错难、追溯难、对结构稳定性要求高。而 JSON 的可读、可校验、跨语言通用特性恰好满足了这一切。AI 在这个生态里只是又加了一层读写端根本不可能把它彻底替换。4. 我的实战建议AI 场景下把 JSON 用稳的几个硬功夫聊完宏观趋势我把自己在 AI 项目里积累的 JSON 实操经验整理成几条每一条都是从翻车现场爬出来的。4.1 先定 Schema再让模型动笔这是我目前最重要的一条铁律永远不要在 prompt 里只说“返回 JSON”。你必须给出明确的 Schema 定义最好附带一个最小示例。模型对示例的模仿能力远超对抽象描述的遵从能力。我常用的模板是这样请提取用户邮件中的订单信息输出 JSON必须遵循以下 Schema { order_id: 字符串必填, date: 日期字符串格式 YYYY-MM-DD必填, amount: 数字必填, notes: 字符串可为空默认为空字符串 } 输出示例 {order_id: A10086, date: 2025-06-01, amount: 199.9, notes: }注意我不说“notes 可选”而是直接规定“可为空默认为空字符串”。AI 对“可选”的理解往往和程序员的默认值不一样。给它一个明确的兜底策略比你事后做空值判断省一万倍心。4.2 五个高频翻车现场和处置方案现场一类型不匹配典型报错是cannot deserialize value of type java.util.date from str。热搜词里明晃晃挂着这个。原因是模型把日期输出成了字符串给 Java 后端Java 的 Jackson 默认又不能把这个字符串自动转成 Date。我踩过一次后来统一方案是前端/上游约定日期一律用 ISO 8601 格式字符串2025-06-01T10:00:00Z后端用JsonFormat指定格式或者写自定义反序列化器。关键是把时间格式写在 Schema 里别让模型自己猜。现场二模型把 JSON 包在代码块里。特别是用开源模型时它经常输出{ order_id: A10086 }前后还可能带着“这是你要的JSON”这种解释文字。解析前必须先清理提取第一个{到最后一个}之间的内容再交给JSON.parse。我写过一个正则清理函数现在还在用。现场三字段缺失。模型常常自信地省略“它觉得没必要”的字段即使你在 required 里写了。单一靠 Schema 约束不够下游一定要有默认值机制。Pydantic 里给Field(default...)Zod 里给.default()都是防这个。现场四格式漂移。同一个 Schema不同模型返回的风格不同有的把数值写成字符串有的空数组写成 null。这个只能靠运行期校验兜住。我现在所有 AI 返回的 JSON 都会过一道 Pydantic 或 Zod 校验不合格就重试。宁可多跑一轮模型不可带着脏数据入库。现场五流式切片。前面提过SSE 流式输出时 JSON 被切得七零八落。处理优先级应该是先保证整体能解析再考虑增量渲染。很多人上来就折腾流式渲染结果项目交付时连解析都还没跑通。4.3 工具链升级建议针对上面的坑我把工具链也升级过一轮现在这些是我的标配PydanticPython/ ZodTypeScript运行时数据校验比手写JSON.parseif判断强太多。jq命令行处理 JSON 依然高效特别是调试阶段想看某个字段一行搞定。jsonlines 工具 / jl处理 JSONL 数据集的利器。JSON Schema Validator无论是 Python 的jsonschema还是前端 ajv都建议接进 CISchema 变更时自动回归。这套组合让我在项目里几乎不用再手工比对 JSON 的字段。4.4 什么时候可以真的不用 JSON我也得说句公道话有些场景确实可以淡化 JSON纯聊天、纯问答、不需要结构化落地的场景JSON 对使用者无感。模型直接调工具、参数完全由模型内部生成你看不见 JSON这其实是“JSON 内化”而非“JSON 消亡”。向量检索、语义记忆这类以 embedding 为核心的功能向量和分数才是主角JSON 只是外壳。但只要你涉及持久化、跨系统通信、审计日志、权限控制JSON 就绕不开。它不会变成历史的尘埃只会在系统深处继续老黄牛一样干活。5. 最后分享一点个人感触我做 AI 编排平台时跟同事争论过要不要“抛弃 JSON全部用自然语言传参”。当时我觉得AI 都这么强了为什么还让我写这些繁琐的括号和引号结果上线第二周就被打脸Agent 之间拿自然语言传上下文一段对话里层层嵌套既不能校验也不能回溯只能靠模型自己“理解”。后来我们还是老老实实引入了 structured output JSON Schema把关键参数全部结构化系统才算稳定下来。这件事给我的教训是越智能的系统越需要明确的边界和契约。JSON 在 AI 时代并没有消亡它只是从“给人看的配置文件”变成了“AI 世界的接口文档”。那些跟你大喊 JSON 已死的人要么不做工程要么还没被模型五花八门的输出毒打过。而你只要把 Schema 设计、流式处理、校验兜底这几件事做扎实手里的饭碗反而比传统后端时期更稳。
企业数字化 ERP 产品动态
相关推荐
LEF/DEF 5.8:物理设计中零容错的ASCII契约解析 简介:本资源是Cadence官方发布的《LEF/DEF 5.8 语言参考》PDF手册,面向集成电路物理设计工程师、EDA工具使用者及VLSI课程学习者,系统解决LEF/DEF格式在工艺建模、单元库定义、布局布线描述与跨工具数据交换中的核心语法与规范理解问题。文件… · 2026/11/4 21:00:54
AI Agent生产级Harness:7大子系统构建可调度、可观测、可运维的操作系统 1. 什么是让AI Agent真正干活的Harness?不是框架,不是SDK,而是一套可调度、可观测、可运维的“生产级操作系统”你有没有试过用LangChain搭一个Agent,本地跑通了,逻辑也对,但一放到真实业务里就崩——任务卡… · 2026/11/4 21:00:54
Git Worktree:高效并行开发的Git进阶技巧 1. Git Worktree:告别频繁切换的开发利器 作为一名长期与Git打交道的开发者,我深刻理解那种在多个任务间频繁切换的痛苦。每次遇到紧急bug需要处理时,都要经历stash->checkout->fix->commit->checkout->stash pop的繁琐流程。… · 2026/11/4 20:59:51
智能视频场景识别:PySceneDetect让视频分析自动化 智能视频场景识别:PySceneDetect让视频分析自动化 【免费下载链接】PySceneDetect :movie_camera: Python and OpenCV-based scene cut/transition detection program & library. 项目地址: https://gitcode.com/GitHub_Trending/py/PySceneDetect
告别手… · 2026/11/5 3:32:15
5大场景检测技术解析:从入门到精通的视频智能分割指南 5大场景检测技术解析:从入门到精通的视频智能分割指南 【免费下载链接】PySceneDetect :movie_camera: Python and OpenCV-based scene cut/transition detection program & library. 项目地址: https://gitcode.com/GitHub_Trending/py/PySceneDetect
价… · 2026/11/5 3:32:15
PT(PrimeTime)命令之:set_cell_mode /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 3:32:15
三次握手 四次挥手还不会?用tcpdump分析给你看 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 3:32:15
FreeTube 护眼模式快速上手:60 秒切深色,夜间把蓝光调舒服 FreeTube 护眼模式快速上手:60 秒切深色,夜间把蓝光调舒服
FreeTube 是个开源、把隐私放在第一位的 YouTube 客户端。想让它对眼睛友好点,不用折腾半天:跟着下面的顺序走,60 秒就能切到深色,再花几分钟把夜… · 2026/11/5 3:32:15
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38
多智能体协作系统架构设计与实践优化 1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中… · 2026/11/5 0:00:39
大模型系统性入门实战指南:从原理到部署微调的全链路路线 提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#… · 2026/11/5 0:00:39
鸿蒙文件系统沙箱机制解析与开发实践 1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的… · 2026/11/5 0:00:39
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38