json字符串无法解析。。
发布于 2年前 作者 fyddaben 5348 次浏览

{ "_id": "510765614cbf920479be4db6", "article_id": 59276, "title": "西班牙9月服务业PMI为2011年11月以来最低", "title_other": "", "title_font": "", "title_color": "", "outlink": "", "title_img": "", "keyword": "", "summary": "", "author": "", "source": "", "state": 0, "editor": "system", "ctrolTime": "2012-10-03 15:11:23.0", "updateTime": "2012-10-03 15:11:23.0", "editTime": "2012-10-03 15:11:23.0", "topeak": 0, "visit_count": 1, "key_url": "", "channel_id": 0, "lanmu_id": 0, "content": [ “西班牙9月服务业PMI为2011年11月以来最低。” ], "lanmu": { "lanmu_id": 2, "channel_id": 1, "lanmuName": "数据快递", "detail": "", "state": 0, "parent_id": 0, "lanmu_layer": 0, "url": "", "lanmuTag": “” }, "channel": { "channel_id": 1, "channelName": "财经速递", "detail": "", "state": 0, "channelTag": "cjsd", "display": 0 }, "extlist": [], "extnamesmap": [ { "ext_id": 0, "extName": "", "extCode": "", "extType": “” } ], "toppic": { "topic_id": 0, "topicName": "", "detail": "", "topicTag": “” }, "topic_id": 0, "sharon": { "sha_id": 0, "article_id": 59276, "sha_name": "", "sha_desc": "", "sha_content": "", "teacher": "", "teadetail": "", "tea_pic": "", "sha_addr": "", "sha_lat": "", "sha_lon": "", "sha_map": "", "sha_st": "", "sha_cell": "", "sha_mobile": "", "sha_qq": "", "sha_email": "", "sha_busline": "", "sha_carline": "", "sha_pic": “” }, "company": { "company_id": 0, "article_id": 59276, "comp_name": "", "comp_logo": "", "comp_desc": "", "comment_link": "", "comp_commt": "", "comp_qq": "", "comp_mobile": "", "comp_cell": "", "comp_email": “” }, "analysor": { "analsy_id": 0, "article_id": 59276, "analsy_name": "", "analsy_pic": "", "analsy_desc": "", "analsy_link": “” } } 如上字符串,在JSON解析工具http://www.json.org.cn/tools/JSONEditorOnline/index.htm下可以解析。可是nodejs 中用JSON.parse()。却提示undefined:1 [object object] Unexpected token 0

7 回复

@jiyinyiyong 正解我觉得应该是这样的,JSON.parse(string)采用了严格认证模式,参数string必须是一个符合JSON标准的字符串,例如标准中提到:键必须是字符串,字符串必须是双引号,只能出现字符串、数字、布尔这三种基本数据类型或者以这三种基本数据类型为元素的数组[]或者对象{}。对于程序中使用JSON.parse进行转换时,还约束了string中最好不要在2个键值对间有其他的符号例如空格、制表符、换行等。虽然有些工具会通过自动格式化认为你这个json是标准json字符串,但是建议程序中的json字符串不要违反JSON的一些基本标准。实现这一标准并不是强制的,但是实现标准能让json在其他语言环境下达到通用共识。 所以,出现这个问题,我觉得是直接拿这一长条的字符串(带有换汗和制表符)去转而导致的错误。

很easy的

"article_id": 59276,

像上面这样的。必须转化成 "article_id": "59276",

也就是当你使用JSON.parse()时,key与value必须都得用 双引号 引起来,单引号也不行,必须是双引号,你可以用替换的方法把 冒号 到 豆号之间的加上 双引号

我刚测试了一下,并非是数字的转换原因,首先你要确保你拿到的这串数据是字符串,然后才可以JSON.parse,我在控制台把字符串弄成一行就ok了,代码如下:图片

原来是这样。不过存储的原型就是没加双引号的。后来又找了一下。我就不用json.parse了,因为获得这个字符串赋值给了doc。所以我想取里面的值,直接就用doc.title就是标题内容了。不用强转了。

把我的回复删掉了… 好奇怪, 现在的 Chrome 里 JSON.parse 需要正确的 JSON 字符串才行… 上次回帖的时候我特意在浏览器执行了一遍记得是不一样的…

我这里也遇到同样的问题: 读取 xxx.txt(里面就是一段 json)-> JSON.parse( fs.readFileSync( xxx.txt ) ) -> 报 SyntaxError: unexpected token 原因:文件编码问题 (windows 平台)xxx.txt 是用右键新建的文件,然后另存为 ‘utf-8’ 格式,但还是报语法错误 解决:用 sublime text (notepad 之类的也行)重新新建一个并保存,然后就可以成功 parse 了

我好像看到了几个中文引号,是不是浏览器显示错误?

回到顶部