不太标准的json数据别人是如果操作的?

某php站resultjson

{
    "queryExt": "segmentfault",
    "data": [{
        "token": "",

        "is_gif": 0,
    }, {}],
}

这明显格式不对啊,我的认知中下面的

{
    "queryExt": "segmentfault",
    "data": [{
        "token": "",

        "is_gif": 0
    }, {}]
}

有没有大佬科普下相关知识,这种该怎么操作?

阅读 3.5k
5 个回答

JSON 标准 中,是不存在有这个语法情况,虽然 JS 中是存在的。

但是,JSON 还有一个扩展语法 JSON5,定义了一种宽松的 JSON ,各个语言基本都有相应实现的 parser。

这种叫做尾后逗号(Trailing_commas)。

从 ES5 开始 JS 就可以支持了,直接当对象字面量的话 eval 即可。

但 JSON 标准里是不支持尾后逗号的,用 JSON.parse 是会报错的。

在 js 代码里,最后一个逗号是可以有的(大概是比较新的浏览器都可以)
但是在 JSON 库的解析逻辑了,最后一个逗号是错误的

如果是 PHP 后端,使用库函数 json_encode 不会生成不符合规范的 最后一个逗号
如果不能让后端改正,那么前端直接 eval 应该也行。。。用标准的 JSON.parse 会报错

在我刚看到这两个JSON的时候,我也认为第一个JSON的格式是错误的 ,我把这两个JSON都拿去做了一下格式校验 JSON校验/格式化 ,结果发现都是正确的格式. 我接着试图用各种不同的标准(RFC 8259/RFC 7159), 同样也是一样的效果,但是,他们给我了一个小提示: Removed trailing comma. 意思就是要移除尾部的逗号。

我看了上面几位的回答,专门去搜索了尾后逗号的相关资料
ES2017 - JSON尾后逗号
MDN - JSON尾后逗号

自己搞还是规范点吧,ESLint全部干掉

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题