如何使JSON解析包含单引号的JSON字符串

时间:2019-06-06 13:51:09

标签: 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 ) after argument list

2 个答案:

答案 0 :(得分:2)

您无需将数据视为JS中的字符串并再次进行解析,而只需将值作为数组文字注入到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"}]');

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

如果我们只是按照我建议的方式直接注入JSON,那么生成的JS是这样的(我已经添加了console命令,以便您可以看到结果):

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

答案 1 :(得分:-1)

我们本质上是在应用程序中执行此操作以实现相同的目的

在控制器中:

var serializerSettings = new JsonSerializerSettings
{
    ContractResolver = new CamelCasePropertyNamesContractResolver(),
};
modal.Sheets = JsonConvert.SerializeObject(Sheets, serializerSettings);

在视图中:

var SheetsArr = "@Html.Raw(@Model.Sheets.Replace("\"", "\\\""))");