如何在JSON.NET中编码单引号/撇号

11

如何在JSON.NET中将'编码为\u0027

这样json字符串看起来会像这样:

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

1
为什么需要以这种方式编码撇号?{"Id":8,"CompanyName":"Jane's bakery"}是有效的JSON。 - nick_w
1
jQuery的parseJSON由于撇号而失败了。 - CoffeeCode
我明白了。你的前端代码如何获取JSON数据? - nick_w
声明 @json nvarchar(max) = N'[{"qwe":"asd'qwe","zxc":"asd"asd"}]'; 这将在SQL中引发错误。因此,在这里应使用单引号转义。 - taburetkin
注意:至少目前为止(jQuery 3.6.3),未转义的单引号对于$.parseJSON不会造成问题。 - user764754
4个回答

22

示例调用

 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'} - serge

7
Json.NET 4.5 Release 11新增了一个控制字符串转义的选项。其中之一是转义所有HTML字符,包括单引号。

JsonWriter.StringEscapeHandling


2

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

如果你正在服务器端代码中生成json字符串然后将其输出到客户端JavaScript中,以便可以将其转换为JavaScript对象,则不需要进行转义。

(代码使用asp风格语法显示)

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

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

使用JSON时...

var myData = <%=myServerGeneratedString %>;

Javascript会将未加引号的字符串解释为javascript对象,例如:

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

由于在处理服务器端和客户端字符串时很容易混淆,这个提示可能对某些人有用。它可能适用于原帖作者,也可能不适用 - 我相信有许多情况下需要转义单引号。


谢谢这个提示。但是如果 myServerGeneratedString 是空的并且你去掉单引号,那么会有一个 JavaScript 语法错误,你无法处理。如果保留单引号并且 myServerGeneratedString 是空的,那么就不会有更多的损害,只是一个空字符串,你可以检查。这就是为什么我即使它有点丑陋也要保留它们的原因。 - peter_the_oak

-1

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

这是我在对象可能包含撇号(例如用户名)时使用的方法。


我点了踩,因为它是 @Rizwan Ahmed 的答案的完全复制。而且格式也很糟糕。 - Antoine Thiry
4
感谢您对您的反对票进行评论。这种做法非常罕见,令人欣慰。太多人不这样做——我称他们为“匆忙负评者”。这种行为完全没有任何生产力。| @AntoineThiry - InteXX

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