【问题标题】:JSON.parse failing without reasonJSON.parse 无故失败
【发布时间】:2013-09-25 01:58:20
【问题描述】:

我正在使用 NodeJS,以下 JSON.parse 失败,但我不知道原因:

> s[0]
'[["hands[0].session.buyin", "332"]]'
> JSON.parse(s[0]);
SyntaxError: Unexpected token 
    at Object.parse (native)
    at repl:1:6
    at REPLServer.self.eval (repl.js:110:21)
    at repl.js:249:20
    at REPLServer.self.eval (repl.js:122:7)
    at Interface.<anonymous> (repl.js:239:12)
    at Interface.EventEmitter.emit (events.js:95:17)
    at Interface._onLine (readline.js:202:10)
    at Interface._line (readline.js:531:8)
    at 

相关字符串已从文件加载。如果我将字符串复制到控制台中它可以工作,所以我怀疑它可能与文件的编码方式有关,但我无法弄清楚是什么。 JSON.parse 的错误消息显然没有帮助。

【问题讨论】:

  • 看起来不像 JSON。
  • 您可以尝试使用 JSON Lint 服务来确保您的 JSON 有效。
  • s[0] 看起来像二维数组,不是吗?
  • 文件中的行是什么样的?可以贴一下内容吗?
  • JSON.parse('[["hands[0].session.buyin", "332"]]') 按预期工作。

标签: javascript json node.js


【解决方案1】:

String 似乎包含一个Byte-Order Mark

> s[0].charCodeAt(0).toString(16)
'feff'

您必须先退出strip that,然后JSON.parse() 才能管理其余部分。

> JSON.parse(s[0].trim())
[ [ 'hands[0].session.buyin', '332' ] ]

【讨论】:

  • 这正是问题所在。
【解决方案2】:

在 Node v0.10.12 的 REPL 上,这可以正常工作:

> var b = '[["hands[0].session.buyin", "332"]]';
undefined
> JSON.parse(b)
[ [ 'hands[0].session.buyin', '332' ] ]
> 

字符串是二维数组的有效 JSON 表示形式。

你的环境是什么?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多