问题 带引号的JSON.parse字符串


我有这个:

JSON.parse('{"130.00000001":{"p_cod":"130.00000001","value":"130.00000001 HDD Upgrade to 2x 250GB HDD 2.5\" SATA2 7200rpm"}}');

JSONLint 说这是完全有效的json。但在执行时我有一个 JSON.parse 错误。

但是,如果我将我的代码更改为:

    JSON.parse('{"130.00000001":{"p_cod":"130.00000001","value":"130.00000001 HDD Upgrade to 2x 250GB HDD 2.5\\" SATA2 7200rpm"}}');

(注意双反斜杠)

它有效,但现在JSONLint说 invalid json

有人可以帮助理解这种行为吗?


7899
2018-06-18 02:32


起源

这对我来说似乎很简单。 Jsonlint坏了;) - Wolph
输入字符串来自哪里?它是由JSON编码器生成的吗? - paullb
@paullb不是来自PHP $ _POST变量。 - mjsilva
@paullb我不清楚,它来自JS对象的JSON.stringify - mjsilva
你为什么打电话 JSON.parse 在字符串文字而不是只包括JSON文本作为普通对象文字? - Matthew Crumley


答案:


这是有线格式之间的区别,以及您必须在代码中编写以获得有线格式的内容。当你在代码中声明这个时,你需要在你的文字中加上双\,所以字符串得到一个反斜杠(否则它会解释\“作为一个转义序列,只是声明一个”并把它放在你的字符串中)。如果打印出文字的值,您将看到一个反斜杠。


16
2018-06-18 02:41



Tks Dean,我想我首先要逃避javascript,然后是JSON。所以假设这是来自PHP,我怎么能“加倍”逃避它:我试过这个:str_replace('\“','\\”',$ json)但它不起作用。 - mjsilva
得到它:str_replace('\\'','\\\\'',$ json)今天我知道还有一个逃避的地狱:) - mjsilva