← 返回博客

常见 JSON 错误及修复方法

JSON 语法错误故障排除完整指南。学习识别和修复最常见的 JSON 验证问题。

Big JSON Team10 分钟阅读beginner
B

Big JSON Team

Technical Writer

Expert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.

10 分钟阅读

# 常见 JSON 错误及修复方法

JSON 语法错误很容易犯,一旦知道要寻找什么,也很容易修复。本指南涵盖最常见的错误及解决方案。

错误 1:缺失或多余的逗号

逗号是 JSON 中最常见的错误来源。

❌ 错误的方式

缺少逗号:
{

"姓名": "张三",

"年龄": 30

"城市": "北京"

}

多余的尾部逗号:
{

"姓名": "张三",

"年龄": 30,

}

多余的逗号在数组中:
{

"标签": ["json", "数据",]

}

✅ 正确的方式

{

"姓名": "张三",

"年龄": 30,

"城市": "北京"

}

{

"标签": ["json", "数据"]

}

修复技巧

  • 每个值后面放逗号,除了最后一个
  • 数组元素之间需要逗号
  • 检查最后一个元素后没有逗号

错误 2:引号类型错误

JSON 只允许双引号,不允许单引号或其他引号类型。

❌ 错误的方式

{

'name': 'John'

}

{

"name": 'John'

}

{

name: "John"

}

✅ 正确的方式

{

"姓名": "张三"

}

常见原因

  • 从 Python 或其他语言复制代码(单引号允许)
  • 使用 HTML 中的直弯引号而不是编程引号
  • 键没有引号

错误 3:未引用的属性名

在 JSON 中,所有键(属性名)必须用双引号引起来。

❌ 错误的方式

{

姓名: "张三",

年龄: 30

}

{

name: "John",

age: 30

}

✅ 正确的方式

{

"姓名": "张三",

"年龄": 30

}

为什么

JavaScript 允许无引号的键,但 JSON 不允许。始终引用您的键。

错误 4:未转义的特殊字符

在 JSON 字符串中,某些字符必须被转义(前面加反斜杠)。

❌ 错误的方式

{

"message": "他说 "你好""

}

{

"path": "C:UsersDocuments ile.json"

}

{

"quote": "他说 'Hello'"

}

✅ 正确的方式

{

"message": "他说 \"你好\""

}

{

"path": "C:\\Users\\Documents\\file.json"

}

JSON 中的转义序列

| 序列 | 字符 |

|------|------|

| \\" | 双引号 |

| \\ | 反斜杠 |

| \/ | 正斜杠 |

| \b | 退格符 |

| \f | 换页符 |

| \n | 换行 |

| \r | 回车 |

| \t | 制表符 |

| \uXXXX | Unicode 字符 |

错误 5:错误的数据类型

❌ 错误的方式

{

"年龄": "30",

"价格": $19.99,

"分数": 95.5%

}

✅ 正确的方式

{

"年龄": 30,

"价格": 19.99,

"分数": 95.5

}

JSON 允许的类型

  • 字符串: "文本"
  • 数字: 42-3.14
  • 布尔值: truefalse
  • null: null
  • 数组: [1, 2, 3]
  • 对象: { "键": "值" }

常见错误

  • ❌ 数字用引号引起来:"30"
  • ❌ 布尔值小写:TrueFalse
  • ❌ 未引用的日期:2026-01-14

错误 6:缺少或多余的括号和括号

❌ 错误的方式

{

"users": [

{"name": "张三"},

{"name": "李四"}

]

} // 缺少一个括号

// 额外的括号

[["item"]]

// 混合括号

{"items": ["a", "b"}

✅ 正确的方式

{

"users": [

{"name": "张三"},

{"name": "李四"}

]

}

{

"items": ["a", "b"]

}

匹配规则

  • 每个 { 需要一个 }
  • 每个 [ 需要一个 ]
  • 它们必须正确嵌套

错误 7:尾部逗号

❌ 错误的方式

{

"item1": "value1",

"item2": "value2",

}

["item1", "item2",]

✅ 正确的方式

{

"item1": "value1",

"item2": "value2"

}

["item1", "item2"]

为什么

JSON 不允许数组或对象末尾的逗号。这是常见的初学者错误。

错误 8:使用未定义或 NaN

JavaScript 支持 undefinedNaN,但 JSON 不支持。

❌ 错误的方式

{

"value": undefined,

"result": NaN,

"infinity": Infinity

}

✅ 正确的方式

{

"value": null,

"result": 0,

"infinity": null

}

JavaScript 中的解决方案

// 使用自定义 replacer 处理特殊值

const data = {

value: undefined,

result: NaN

};

const json = JSON.stringify(data, (key, value) => {

if (value === undefined || Number.isNaN(value)) {

return null;

}

return value;

});

错误 9:编码问题

❌ 错误的方式

包含非 UTF-8 编码的文件。

✅ 正确的方式

# 检查编码

file data.json

# 转换为 UTF-8

iconv -f ISO-8859-1 -t UTF-8 old.json > new.json

中文字符

{

"名字": "张三",

"城市": "北京"

}

错误 10:注释

JSON 不支持注释(虽然 JSON5 支持)。

❌ 错误的方式

{

"name": "张三", // 这是注释

"age": 30 # 不允许注释

}

✅ 正确的方式

使用 JSON5 或移除注释:

{

"name": "张三",

"age": 30

}

验证 JSON 的工具

在线工具

  • JSONLint - jsonlint.com
  • - 显示详细错误消息

    - 指出确切的行号

  • Big JSON Viewer - bigjson.online
  • - 处理大文件

    - 实时验证

  • JSON Formatter - jsonformatter.org
  • - 快速验证

    - 即时反馈

    命令行工具

    # Python
    

    python3 -m json.tool data.json

    # jq

    jq . data.json

    # Node.js

    node -e "console.log(JSON.stringify(JSON.parse(require('fs').readFileSync('data.json')), null, 2))"

    IDE/编辑器

    • VS Code: 内置 JSON 验证
    • Sublime Text: JSONLint 插件
    • WebStorm: 自动验证

    常见错误排查清单

    快速检查清单

    □ 所有属性名都用双引号引起来?
    

    □ 数字、布尔值和 null 没有引号?

    □ 所有字符串都用双引号引起来?

    □ 所有特殊字符都被转义了吗?

    □ 逗号放在正确的位置?

    □ 没有尾部逗号?

    □ 括号和括号正确匹配?

    □ 没有 undefined、NaN 或 Infinity?

    □ 没有注释?

    □ 文件编码是 UTF-8?

    使用版本控制查找错误

    # 检查最近的更改
    

    git diff data.json

    # 查看特定行号

    git blame -L 10,20 data.json

    # 比较版本

    git diff HEAD~1 HEAD data.json

    最佳实践防止错误

    1. 使用工具生成 JSON

    与其手动编写,不如在代码中生成:

    Python:
    import json
    

    data = {"name": "张三", "age": 30}

    json_string = json.dumps(data)

    JavaScript:
    const data = {name: "张三", age: 30};
    

    const json = JSON.stringify(data);

    2. 在提交前验证

    # Git pre-commit 钩子
    

    python3 -m json.tool *.json || exit 1

    3. 使用 Schema 验证

    # 针对 Schema 验证 JSON
    

    ajv validate -s schema.json -d data.json

    4. 自动格式化

    # 自动修复某些错误
    

    jq . data.json > formatted.json

    结论

    常见的 JSON 错误很容易识别和修复,一旦您知道要寻找什么。记住:

    • 始终 使用双引号
    • 始终 引用属性名
    • 避免 尾部逗号
    • 验证 使用工具
    • 使用 代码生成而不是手动编写

    现在您可以自信地调试 JSON!

    Share:

    相关文章

    Read in English