JSON.parse字符串无效字符问题

4

我无法确定以下代码中JSON的问题所在。

以下代码可以正常工作:

var a = JSON.parse('[{"label":"not applicable"},{"label":"see items"},{"label":"40 days"},{"label":"suntest"}]');

但是这会抛出一个异常,"无效字符":
var b = JSON.parse('[{"label":"234"},{"label":"Sunny AG, Sunny Me- Be Cars, Ben., Bu 60, DE 71059, Sind, Discharge p no. 9711\r\n"},{"label":"C207346"}]');

在调试时,我复制了上述运行时代码。实际代码是C# MVC中的:

var a= JSON.parse('@Html.Raw(Json.Encode(Model.ShipToAddressCodeList))');

请注意,在C#中,撇号是字符而不是字符串。 - spatbord
2个回答

6

您需要转义 \r\n。JavaScript 将 \\r\n 中解释为转义字符,但它们实际上是字符串的一部分,应该保留。在每个 \ 前面添加另一个 \ 可以解决这个问题,通过转义转义字符使 JSON 解析器按照字面意思处理:

var b = JSON.parse('[{"label":"234"},{"label":"Sunny AG, Sunny Me- Be Cars, Ben., Bu 60, DE 71059, Sind, Discharge p no. 9711\\r\\n"},{"label":"C207346"}]');

感谢@Joe的快速回复和帮助...您还从“Me Be”之间的字符串中删除了连字符(-)。我也需要将其删除吗? - devgal
1
C#在此处给出了“\n”的非字面解释,而JavaScript没有。你可以知道这一点,因为这里没有JavaScript,但仍然存在问题。 - LinuxDisciple

1

你需要将你的\r\n转义为\\r\\n

var b = JSON.parse('[{"label":"234"},{"label":"Sunny AG, Sunny Me- Be Cars, Ben., Bu 60, DE 71059, Sind, Discharge p no. 9711\\r\\n"},{"label":"C207346"}]');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接