【问题标题】:JSON string containing \" not being parsed包含 \" 的 JSON 字符串未被解析
【发布时间】:2011-01-07 11:11:04
【问题描述】:

我正在使用 James Newton-King 的优秀 JSON 库创建一个 JSON 字符串。 我使用以下代码行创建 JSON 字符串:

string userJSON = Newtonsoft.Json.JsonConvert.SerializeObject(existingAdminUser, Newtonsoft.Json.Formatting.None);

结果如下:

"{\"LoginId\":\"0f1b6c88-08ec-416f-b221-7568dc7c242a\",\"Firstname\":\"Charles\",\"Surname\":\"Barber\",\"Fullname\":\"Charles Barber\",\"Email\":\"charles17@test76876.com\",\"Systems\":null,\"IsValid\":false,\"IsValidExcludingSystems\":true,\"ValidationMessage\":\"\"}"

然后我使用以下代码行将此字符串放入我的 http 响应中:

HttpContext.Current.Response.Write("<input type=\"hidden\" name=\"adminextrainfo\" id=\"adminextrainfo\" value=\"" + userJSON + "\" />");

然后我尝试在客户端访问/解析 JSON,使用:

var userdetails = $.parseJSON(valueOfHiddenField);

解析尝试失败,如果我尝试查看字段的内容(使用警报),那么我只会看到第一个 { char.似乎 \" 字符序列被 js 视为换行符。如何在服务器上对隐藏字段值进行编码,或者如何在客户端处理隐藏字段值以使其“处理”\ " 字符序列?

非常感谢。

【问题讨论】:

    标签: .net json parsing newline


    【解决方案1】:

    所以我们这里有一些转义/编码混乱。你的字符串:

    "{\"LoginId\":\"0f1b6c88-08ec-416f-b221-7568dc7c242a\",\"Firstname\":\"Charles\",\"Surname\":\"Barber\",\"Fullname\":\"Charles Barber\",\"Email\":\"charles17@test76876.com\",\"Systems\":null,\"IsValid\":false,\"IsValidExcludingSystems\":true,\"ValidationMessage\":\"\"}"
    

    除非在某些 C# 上下文中显示(例如 Visual Studio 调试器),否则它是不正确的。仅当您将其放在 C# 源代码中时,才需要所有这些斜杠。如果将其分配给变量,则该变量将在没有斜杠的情况下存储它,因为它们仅用于在 C# 代码中转义。它们不能成为问题的根源,因为它们只存在于 Visual Studio 调试器中,而不存在于您的应用程序中。

    但是,您不能只将 JSON 插入 HTML。它包含几个字符(例如,第二个位置的双引号),因为它们在 HTML 中具有特殊含义,所以必须对其进行转义。

    所以你的修复应该是:

    HttpContext.Current.Response.Write("<input type=\"hidden\" name=\"adminextrainfo\" id=\"adminextrainfo\" value=\"" + Server.HtmlEncode(userJSON) + "\" />");
    

    【讨论】:

      猜你喜欢
      • 2015-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-14
      • 1970-01-01
      • 2019-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多