Json.Parse 转义换行符
Posted
技术标签:
【中文标题】Json.Parse 转义换行符【英文标题】:Json.Parse escape newline characters 【发布时间】:2014-12-12 19:05:30 【问题描述】:我有一个页面,我正在尝试使用 JSON.parse 解析以下 json 字符串
'["Name":"Eggs","Complete":false,"Notes":"Notes here\n","Name":"Sugar","Complete":false,"Notes":null]'
但是下面的代码给出了错误"Uncaught SyntaxError: Unexpected token"
var groceriesJson = JSON.parse(jsonString);
然后我才知道这是因为 \n
在 json 字符串中。所以我确实尝试了this solution。但没有运气。还是一样的错误"Uncaught SyntaxError: Unexpected token"
function escapeSpecialChars(jsonString)
return jsonString.replace(/\\n/g, "\\n")
.replace(/\\'/g, "\\'")
.replace(/\\"/g, '\\"')
.replace(/\\&/g, "\\&")
.replace(/\\r/g, "\\r")
.replace(/\\t/g, "\\t")
.replace(/\\b/g, "\\b")
.replace(/\\f/g, "\\f");
var groceriesJson = JSON.parse(escapeSpecialChars(jsonString));
有什么想法吗?谢谢
---更新----
我不是手动创建这个字符串,我有从 c# 对象创建 json 字符串的 c# 代码
var jss = new System.Web.Script.Serialization.javascriptSerializer();
var groceries = jss.Serialize(Model);
然后在javascript代码中我有
var jsonString = '@html.Raw(groceries)'
var groceriesJson = JSON.parse(escapeSpecialChars(jsonString));
【问题讨论】:
为什么要在 JavaScript 中嵌入 JSON 作为字符串文字?只需将其用作数组文字并跳过手动解析步骤。 那行得通。如果您可以发布答案,我会将其标记为答案。谢谢 【参考方案1】:您应该像 \\n
一样转义 \
,您的 JSON 变成:
'["Name":"Eggs","Complete":false,"Notes":"Notes here\\n","Name":"Sugar","Complete":false,"Notes":null]';
如果您无法访问 JSON,那么您的函数应该是:
function escapeSpecialChars(jsonString)
return jsonString.replace(/\n/g, "\\n")
.replace(/\r/g, "\\r")
.replace(/\t/g, "\\t")
.replace(/\f/g, "\\f");
var groceriesJson = JSON.parse(escapeSpecialChars(jsonString));
【讨论】:
我没有手动创建 json 字符串。我更新了我的问题。【参考方案2】:正如@Quentin 建议的那样,您可以跳过将值存储在文字中,而只需执行以下操作:
var jsonObject = @Html.Raw(groceries);
【讨论】:
以上是关于Json.Parse 转义换行符的主要内容,如果未能解决你的问题,请参考以下文章
前端开发JSON.parse 解析json字符串时,遇换行符报错
JSON.parse 解析json字符串时,遇字符串换行符,解析失败