“=”中JSON文本符号导致解析错误

问题描述:

 "Cost to Implement \nRate 5 to 1\nHigh = 5\nLow = 1" 

作为JSON的部分解析在jsonlint细,但未能在Chrome与任何这些方法的(各自分别试过):“=”中JSON文本符号导致解析错误

sections = $.parseJSON(myJSONstr); 

sections = JSON.parse(myJSONstr); 

sections = eval('(' + myJSONstr + ')'); 

当我删除JSON字符串中的“=”符号,一切正常。我的用户需要能够在他们输入的文本中输入=号。有没有解决的办法?

+0

如何设置'myJSONst',如果您提供的字符串没有正确转义,将无法正确解析。 – zzzzBov

+0

@pst,不要使用'eval'来解析JSON。 – zzzzBov

+0

通过将文本输入到textarea元素中创建JSON字符串,将这些字符串保存到类对象中,然后使用JSON.stringify创建JSON。在textarea元素中输入的\ n似乎在\ J中保存为\ n。 – GettingToOld

它看起来像你正在进入换行而不逃脱它。你需要避开反斜杠。

,因为你正在进入一个原始换行符到JSON以下失败,因此必须转义

var obj = JSON.parse('{"prop": "Cost to Implement \nRate 5 to 1\nHigh = 5\nLow = 1"}'); 

逃离反斜杠

// Works fine 
var obj = JSON.parse('{"prop": "Cost to Implement \\nRate 5 to 1\\nHigh = 5\\nLow = 1"}'); 

注意的是,这些新线(和其他字符如果您正确序列化您的JSON对象,它们将自动转义为Tab,Backspaces ...)。例如

// Correctly parses the new line 
JSON.parse(JSON.stringify({prop: "Line1\nLine2\tAfterTab"})) 
+0

谢谢 - 现在可以工作。它看起来像保存的JSON只保存\ n,并且我将需要在解析之前搜索JSON以\ n替换\ n以便它正确解析。真正?感谢您的快速答复。 – GettingToOld

+0

@GettingToOld,你不应该做一个替换来将你的数据编码为JSON,否则你最终会遇到各种其他的编码错误,如'\ f','\ r','\ t',等等。请显示您用来生成字符串的代码,这可能是问题所在。 – zzzzBov

+1

你不应该搜索'\ n'。您需要使用像JSON.stringify这样的JSON编码器,它将处理新行以及必须为JSON转义的所有其他字符。尝试以下'JSON.parse(JSON.stringify({prop:“Line1 \ nLine2”}))' –