修复 JSON 中的单引号
JSON 字符串与对象键必须使用双引号。单引号值常见于 JavaScript 片段、类 Python 输出以及 LLM 响应中。
为什么单引号不行
严格 JSON 只接受双引号字符串。解析器会拒绝 {'name':'Ada'},尽管 JavaScript 开发者可能觉得这写法很眼熟。
出错示例
{ 'name': 'Ada', 'active': true }
修复后的 JSON
{ "name": "Ada", "active": true }
单引号文本来自哪里
Python 的 repr() 和 dict 打印、从控制台输出复制的 JavaScript 对象字面量、Ruby 的 hash inspect 输出,以及很多 LLM 回复,都会用单引号。它们都不是 JSON —— 而是各语言原生的字面量,只是长得像而已。
为什么直接 find-replace 很危险
无脑把 ' 替换成 ",会破坏内含撇号的值,比如 { 'note': 'it\'s fine' }。替换之后内部的撇号会和新的字符串定界符冲突。安全的转换器必须跟踪引号上下文,只替换定界符而不动内部字符。
安全的转换策略
先做 token 化:扫描文本,按开头的引号识别字符串边界,再用双引号重新拼接每个 token —— 对内部出现的双引号做转义,并去掉原本多余的转义单引号。本站的修复工具一次就能完成这件事。
与之相关的 JSON 语法错误
带单引号的 JSON 通常还伴随着其他 JavaScript 风格的小问题:未加引号的键、尾随逗号、行注释或 undefined。修完引号之后,再校验一遍,看看还有没有别的问题。
FAQ
问:JSON5 接受单引号字符串吗?答:是的,JSON5 允许。问:Python 的 json.loads 会接受单引号吗?答:不会 —— 如果源真的是 Python 字面量,请用 ast.literal_eval;否则先把引号换过去。问:JSON 的键也必须用双引号吗?答:是的 —— 键本身也是字符串,遵循同样规则。
JSON 修复指南
主题中心
- JSON Parse Errors: Read the Message, Jump to the Fix
- Fix Invalid JSON: From 'What's Wrong' to a Clean File
- JSON Formatter, Validator, Viewer: Pick the Right Tool
- Repair LLM JSON Output: Handling Almost-JSON from AI
- Privacy: JSON Tools That Don't Leave Your Browser
- JSON Interop: YAML, CSV, XML, JWT, Schema
具体指南
- 如何解码 Base64 字符串(以及 JWT Payload)
- URL 编码:百分号编码查询参数与路径
- 将 YAML 转为 JSON(并避免缩进错误)
- 将 JSON 转为 CSV:把对象数组扁平化
- 将 JSON 转为 XML:根元素、属性与数组
- 将 JSON 转义为字符串字面量(并解码双重编码的 JSON)
- 修复 JSON 中的尾随逗号
- 修复 JSON 中未加引号的键
- 修复 LLM 输出的 JSON
- 修复 JSON 解析错误:Expected Property Name
- JSON 与 JavaScript 对象字面量的区别
- 在发起 API 请求前校验 JSON
- JSON 格式化器 vs JSON 修复工具
- 修复 JSON Unexpected Token 错误
- JSON 转 JavaScript 对象转换器