一个只说“意外令牌”的验证器告诉你的只是它在哪里放弃了,而不是你做错了什么。这两个地方通常不同。缺少的逗号通常报告在下一个令牌处,而不是在缺少的逗号本身处,未关闭的括号无论在哪一行打开,都会在文件末尾报告。
JSON验证器报告什么
粘贴文档并按验证,或者直接停止输入,因为验证会自动运行。结果会命名实际出错的构造:单引号、未加引号的键、尾随逗号、大小写错误的关键字如True或NULL、NaN或Infinity、前导零或错误的转义序列,每个都标明开始的行和列。
重复键,大多数验证器对此只字不提
重复键是合法的JSON。规范允许它,你可能使用的每个解析器都保留最后一个值并悄悄丢弃较早的值。这意味着数据可以从一个完全有效的文档中消失,没有任何错误。粘贴
{"region":"eu-west-1","retries":3,"region":"us-east-1"}
验证器报告为有效JSON,一行,并单独警告:
重复键“region”。最后一个值生效,第1行的较早值被丢弃。
这是警告,不是错误,因为规范确实允许。但这是那种在下游某处读取错误值之前一直不可见的bug,大多数工具从不提及它。
错误与警告的区别
错误意味着文档不是有效JSON,下游不应该尝试解析它:语法问题、非法字符、结构错误。警告意味着文档可以解析,但其中有些东西值得再次查看,比如重复键。顶部的状态行告诉你正在查看哪一个,错误在编辑器边距中标记失败的行,这样你可以无需滚动就能找到它。
为什么这在提交或部署前很重要
配置文件、API固定数据和生成的数据最终都会通过JSON解析器,通常在生产环境中,错误消息是运行时的默认解析器给你的。在这里捕获尾随逗号或重复键,带有命名错误的消息,比部署后调试相同的问题更快。