【问题标题】:How to parse JSON objects with double quotes in one of its property values如何在其属性值之一中解析带有双引号的 JSON 对象
【发布时间】:2014-08-28 19:44:35
【问题描述】:

如果我有一个 json 字符串,其中一个属性值包含 double quote,我将无法解析它。

例如,如果我的对象是 { "Name" : "Six \" Pipe" },那么下面的内容会给我一个错误 - Unexpected token P

var str = '{ "Name" : "Six \" Pipe" }';
JSON.parse(str); //error
$.parseJSON(str); //error

字符串在剃刀视图中形成如下 -

 var str = new JavaScriptSerializer().Serialize(obj);

然后在 JavaScript 中我正在做

var obj = JSON.parse('@(Html.Raw(str))');

如何解析这样的字符串?

【问题讨论】:

    标签: c# javascript json asp.net-mvc-4


    【解决方案1】:

    您应该转义反斜杠,因为在 JS 中它只会将 \" 转换为 " 并且会使 JSON 不正确。 The blackslash is discarded by javascript.

    所以正确的字符串应该是-

    var str = '{ "Name" : "Six \\" Pipe" }';
    JSON.parse(str); //works
    

    编辑:

    因此,如果您想在 JS 中创建文字反斜杠,则必须对其进行转义。您可以在创建此字符串并双重转义键的值时执行此操作。 解决这个问题的一种方法可能是 -

    要对字符串(键值)进行 html 编码,就像:" 而不是 \" 等。这在.Net 中对我来说似乎很简单。我不确定,但HttpServerUtility.HtmlEncode 可以提供帮助。
    然后在 javascript 方面,您可以立即解析-fiddle

    【讨论】:

    • 这是误导性的——双反斜杠只需要,因为输入是 JS 字符串文字。 JSON 的“有线格式”不需要它,因为您会看到是否要在 JSON.parse() 的输出上调用 JSON.stringify()
    • 如何以编程方式将字符串中的所有单反斜杠替换为双反斜杠。我试过str.replace("\\","\\\\"),但解析时出现同样的错误。
    • 你从哪里得到这个字符串?
    【解决方案2】:

    我遇到了同样的问题。在花了很多时间尝试处理这些报价后,我来到了这个解决方案

    @{
      var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
      var obj = new {name = "\"Name1\""};
      var objJson = serializer.Serialize(obj);
    }
    <script>
      var jsObject = @Html.Raw(objJson);
    </script>
    

    我使用json作为js对象不做任何解析,html结果会像

    <script>
      var jsObject = {"name":"\"Name1\""} ;
    </script>
    

    这是正确的 JavaScript。希望它对某人有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      • 2014-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-28
      相关资源
      最近更新 更多