代码之家  ›  专栏  ›  技术社区  ›  Jason Jarrett

JSON的转义字符串导致ASP.NET服务器端操作

  •  0
  • Jason Jarrett  · 技术社区  · 15 年前

    我有一个服务器端操作手动生成一些JSON响应。JSON中有一个包含字符串值的属性。

    对于这个JSON结果中包含的字符串值,最简单的转义方法是什么?

    所以这个

    string result = "{ \"propName\" : '" + (" *** \\\"Hello World!\\\" ***") + "' }";
    

    会变成

    string result = "{ \"propName\" : '" + SomeJsonConverter.EscapeString(" *** \\\"Hello World!\\\" ***") + "' }";
    

    并产生以下JSON

    { \"propName\" : '*** \"Hello World!\" ***' }
    
    2 回复  |  直到 15 年前
        1
  •  1
  •   Oleg    15 年前

    首先,我发现手动实现序列化的想法并不好。你应该这样做,mostla只是为了学习,或者你有其他非常重要的原因,为什么你不能使用标准.NET类(例如,使用必须使用.NET 1.0-3.0,而不是更高)。

    现在回到你的代码。您当前生成的结果不是JSON格式。您应该将属性名和属性值放在双配额中:

    { "propName" : "*** \"Hello World!\" ***" }
    

    如何继续阅读 http://www.json.org/ 必须转义的不只是字符的双配额。反斜杠字符也 必须 逃走。您可以在上验证JSON结果 http://www.jsonlint.com/ .

    如果还手动实现反序列化,则应该知道还有更多的字符 可以 被简单地转义到 \" \\ : \/ 、\b、\f、\n、\r、\t和\u后跟4个十六进制数字。

    我在回答开头写的,最好使用标准的.NET类,比如 DataContractJsonSerializer JavaScriptSerializer . 如果必须使用.NET 2.0而不是更高版本,则可以使用 Json.NET .

        2
  •  0
  •   Edgar Bonet    15 年前

    您可以尝试如下操作:

    string.replace(/(\\|")/g, "\\$1").replace("\n", "\\n").replace("\r", "\\r");