json字符串无法解析。。 - CNode技术社区

json字符串无法解析。。
发布于 13 年前 作者 fyddaben 39815 次浏览 最后一次编辑是 9 年前 来自 问答
{
 "_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

13 回复

@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 了

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

如果出现了要如何解决呢?

JSON.parse要求传入的参数是严格的JSON格式字符串,如果直接传入一个对象,当然会报错

Nodejs 破解 不规范json字符串的处理方法 要说解决问题才是王道啊 就只接eval就好了,有可能会存在危险,这个方法是在dojo 的方法看到的

我试了一下,解析没问题啊

我勒个去,2年前的老帖

如果是文件中读的,可能是BOM问题。用二进制打开,前两个字节可能是0xFEFF或0xFFFE标识内容Endian

回到顶部

AltStyle によって変換されたページ (->オリジナル) /