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

回到顶部