javascript - 如何让JSON解析一个包含单引号的JSON字符串

标签 javascript asp.net json

我正在使用 JsonConvert.SerializeObject 在 ASP 中序列化一个数组。数组包含包含单引号等符号的文本。转换工作正常,直到我尝试使用 JSON.parse 在 JavaScript 中解析它。获取单引号时失败。如果可能,我想避免手动删除单引号。

这是 MVC 代码:

SheetsArr = JsonConvert.SerializeObject(Sheets);

这是JS代码:

var SheetsArr = JSON.parse('@Html.Raw(@Model.Sheets)');

这是 Chrome 中的错误消息:

Uncaught SyntaxError: missing ) 在参数列表之后

最佳答案

与其尝试将数据视为 JS 中的字符串并再次解析它,您可以直接将值作为数组文字注入(inject) JS。由于 JSON 是 JS 对象字面量语法的子集,因此它只会被视为字面量。不要认为您甚至不需要 Html.Raw() 命令。

简单尝试

var SheetsArr = @Model.Sheets;

(我在这里假设在 C# 中,您在返回模型之前将 C# SheetsArr 变量分配给了模型的 Sheets 属性。)

然后这消除了 JS 中的单引号字符串被 JSON 字符串中的单引号弄乱的问题。

为了说明这一点,假设 Model.Sheets 包含如下所示的 JSON 字符串:

[{ "SomeProp": "Hello, 'Friend'"}, { "SomeProp": "Hello again"}]

您可以看到单引号。

在您的原始代码中,执行包含该字符串的 Razor 代码将产生以下 JavaScript:

var SheetsArr = JSON.parse('[{ "SomeProp": "Hello, 'Friend'"}, { "SomeProp": "Hello again"}]');

如您所见,中间的单引号现在是一个问题,因为它们终止了外部字符串文字引号。

而如果我们只是按照我建议的方式直接注入(inject) JSON,则生成的 JS 是这样的(我添加了控制台命令只是为了让您可以看到结果):

var SheetsArr = [{ "SomeProp": "Hello, 'Friend'"}, { "SomeProp": "Hello again"}];
console.log(SheetsArr);

关于javascript - 如何让JSON解析一个包含单引号的JSON字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56479058/

相关文章:

iOS 不应在 HTTP POST 中的 NSURLSession 的 NSURL 中添加扩展名

asp.net - WCF 路由/ESB 架构?

java - Jackson json 属性(字符串)到实例

javascript - 我以为关岛是同源政策?

javascript - 使用网络驱动程序清除 Chrome 上的缓存

javascript - Ionic 2 iOS 10.3 - canvas.toDataURL() 错误 : the operation is insecure

javascript - 将控制台传输附加到 Winston 日志记录

javascript - 在javascript中的另一个方法中调用方法?

c# - HttpContext.Current.User 未填充启用的 Windows 身份验证

java - 需要自定义 Jackson 反序列化器的嵌套类