对于以“ t”开头的字符串,为什么JSON解析不会在第一个字符上失败?

时间:2019-09-24 19:13:13

标签: javascript json

我将尽力澄清我的意思。

JSON.parse("te")
VM297:1 Uncaught SyntaxError: Unexpected token e in JSON at position 1
    at JSON.parse (<anonymous>)
    at <anonymous>:1:6

JSON.parse("ce")
VM342:1 Uncaught SyntaxError: Unexpected token c in JSON at position 0
    at JSON.parse (<anonymous>)
    at <anonymous>:1:6

如您所见,字符串“ ce”的解析在位置0失败,而字符串“ te”的解析在位置1失败。这意味着解析器认为存在一些以字符“ t”开头的合法JSON。有人知道那会是什么吗?还是为什么解析器在稍后的t字符失败?

2 个答案:

答案 0 :(得分:10)

关键字true以“ t”开头。因此,直到解析器看到“ e”,它才知道语法无效。

该错误之所以令人着迷,是因为它将“ e”报告为 token ,这不是我实现JSON解析器的方式。这似乎是Node / V8的事情,因为Firefox从位置1(“ t”)开始拒绝整个令牌。

您可以通过尝试JSON.parse("nulp")仔细检查此答案; “ p”上的节点错误。

答案 1 :(得分:2)

完整的JSON语法如下:

JSON = null
    or true or false
    or JSONNumber
    or JSONString
    or JSONObject
    or JSONArray

因此,编译器将处理tnf作为JSON字符串的有效开始。 有关更多信息,请检查:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse