【问题标题】:How to encode the single quote/apostrophe in JSON.NET如何在 JSON.NET 中编码单引号/撇号
【发布时间】:2012-11-24 14:10:40
【问题描述】:

如何使用 JSON.NET 将 ' 编码为 \u0027

所以 json 字符串看起来像这样:

{"Id":8,"CompanyName":"Jane\u0027s bakery"}

【问题讨论】:

  • 为什么需要用这种方式编码撇号? {"Id":8,"CompanyName":"Jane's bakery"} 是有效的 JSON。
  • JjQuery 的 parseJSON 由于撇号而失败并出现异常。
  • 我明白了。您的前端代码如何获取 JSON?
  • 例如 declare @json nvarchar(max) = N'[{"qwe":"asd'qwe","zxc":"asd\"asd"}]'; 这将在 sql 中引发错误。所以,这里应该使用单引号转义

标签: asp.net json.net json


【解决方案1】:

示例调用

 Newtonsoft.Json.JsonConvert.SerializeObject(your_object,
   Newtonsoft.Json.Formatting.None, 
   new Newtonsoft.Json.JsonSerializerSettings 
   { StringEscapeHandling = Newtonsoft.Json.StringEscapeHandling.EscapeHtml })

【讨论】:

  • 可以用单引号编码吗?像这样{'Id':8,'CompanyName':'Jane\u0027s bakery'}?
【解决方案2】:

Json.NET 4.5 Release 11 添加了一个选项来控制字符串转义。一种选择是转义所有包含单引号的 HTML 字符。

JsonWriter.StringEscapeHandling

【讨论】:

    【解决方案3】:

    我以为我有同样的要求,但@nick_w 的评论让我意识到我根本不需要转义单引号。

    如果您在服务器端代码中生成json作为字符串,然后将其输出到客户端javascript中,因此可以将其转换为javascript对象,则不需要转义。

    (使用 asp 样式语法显示的代码)

    使用需要转义单引号的额外步骤...

    var myData = JSON.parse('<%=myServerGeneratedStringWithSingleQuotesEscaped %>');
    

    按原样使用 JSON...

    var myData = <%=myServerGeneratedString %>;
    

    Javascript 将解释不带引号的字符串,例如

    [{"name":"Bill"}, {"name":"Ted"}]

    作为 javascript 对象。

    由于在处理服务器端和客户端字符串时很容易混淆,因此此提醒可能对某些人有用。它可能适用于 OP,也可能不适用于 OP - 我敢肯定在很多情况下单引号确实需要转义。

    【讨论】:

    • 感谢您的提示。但是,如果myServerGeneratedString 为空并且您放弃了单个配额,则会出现您无法处理的 JavaScript 语法错误。如果您保留单个配额并且myServerGeneratedString 为空,则不会比空字符串造成更大的损坏,您可以检查一下。这就是为什么我保留它们,即使它有点难看。
    【解决方案4】:

    Newtonsoft.Json.JsonConvert.SerializeObject(your_object, Newtonsoft.Json.Formatting.None, new Newtonsoft.Json.JsonSerializerSettings { StringEscapeHandling = Newtonsoft.Json.StringEscapeHandling.EscapeHtml })

    当对象可能包含撇号(例如用户名)时,我会使用它。

    【讨论】:

    • 我投了反对票,因为它是@Rizwan Ahmed 答案的精确副本。而且它的格式也很糟糕。
    • 感谢您对您的反对意见发表评论。这是非常罕见且令人愉悦的。太多人不这样做——我称他们为“路过投票”。他们绝对没有生产力。 | @AntoineThiry
    猜你喜欢
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    相关资源
    最近更新 更多