【问题标题】:Not able to parse string to Json object in Js无法将字符串解析为 Js 中的 Json 对象
【发布时间】:2018-02-13 09:28:23
【问题描述】:

json字符串如下:

"{\"d_obs\": 1999, \"f_name\": \"p_add\", \"f_str\": \"CCD\", \"d_left\": 48.9, \"d_pos_label\": \"YES\", \"left\": [48.9], \"cat\": [\"40/207, \"Shiva residency\", Near iscon mega mall, S.G. Highway\"], \"obs\": [1999]}"

JSON.parse() 无法将此字符串解析为对象。问题在于字符串中的 \"Shiva residenty\"。 JSON 无法解析内部双引号(“”)字符串。

谁能帮我解决这个问题。

【问题讨论】:

  • 如果你可以使用\'Shiva residenty\'而不是\"Shiva residenty\",它可以工作
  • @RishikeshDhokare 是的,它有效,但这不是他要求的
  • @RishikeshDhokare 是的,它可以工作,但我想解析我提供的相同字符串,因为我是从服务器的某个地方得到的。我不能改变这个字符串,我只能操纵。

标签: javascript json parsing jsonparser


【解决方案1】:

我认为您在转义时遇到了错误。我有以下字符串:

"{\"d_obs\": 1999, \"f_name\": \"p_add\", \"f_str\": \"CCD\", \"d_left\": 48.9, \"d_pos_label\": \"YES\", \"left\": [48.9], \"cat\": [\"40\/207\", \"Shiva residency\", \"Near iscon mega mall\", \"S.G. Highway\"], \"obs\": [1999]}"

对于更多问题,我建议使用在线转义工具,如this

【讨论】:

    【解决方案2】:

    问题是在双引号中的字符串中转义字符串“Shiva resident”,在双引号中的字符串中也是如此。如果可能,不要手动创建 JSON。在前面使用 JSON.strigify 或在后面使用像 gson (for java) 这样的库。

    console.log(JSON.parse("{\"d_obs\": 1999, \"f_name\": \"p_add\", \"f_str\": \"CCD\", \"d_left\": 48.9, \"d_pos_label\": \"YES\", \"left\": [48.9], \"cat\": [\"40/207, \\\"Shiva residency\\\", Near iscon mega mall, S.G. Highway\"], \"obs\": [1999]}"))

    此外,在 js 代码中使用单引号要容易得多,因为双引号在 html 和 json 中广泛使用。使用单引号,您无需转义所有内容。

    【讨论】:

      【解决方案3】:

      (更新)问题出在这里(实际结果):

      [“40/207,“Shiva 居住地”,靠近 iscon 大型购物中心,SG 高速公路”]

      您需要将 \" 删除到这些字符串(预期结果):

      [“40,Shiva 住宅,靠近 iscon 大型购物中心,S.G. 高速公路”]

      (更新)运行这个例子,它工作正常:

      const str = "{\"d_obs\": 1999, \"f_name\": \"p_add\", \"f_str\": \"CCD\", \"d_left\": 48.9, \"d_pos_label\": \"YES\", \"left\": [48.9], \"cat\": [\"40, Shiva residency, Near iscon mega mall, S.G. Highway\"], \"obs\": [1999]}";
      
      const obj = JSON.parse(str);
      console.log(obj);

      (更新)结果将是:

      {
        "d_obs": 1999,
        "f_name": "p_add",
        "f_str": "CCD",
        "d_left": 48.9,
        "d_pos_label": "YES",
        "left": [
          48.9
        ],
        "cat": [
          "40, Shiva residency, Near iscon mega mall, S.G. Highway"
        ],
        "obs": [
          1999
        ]
      }
      

      【讨论】:

      • 这在我的情况下不起作用。 "cat": [ "40", "Shiva residency", "Near iscon mega mall, S.G. Highway" ] 数组中有一个元素,而不是多个。我想删除字符串中不需要的双引号
      【解决方案4】:

      问题出在这里:

      [“40/207,“Shiva 居住地”,靠近 iscon 大型购物中心,SG 高速公路”]

      您需要在这些字符串中添加 ":

      [“40/207”、“Shiva 居住地”、“靠近 iscon 大型购物中心、SG 高速公路”]

      编辑: 如果您需要使用整个字符串,请使用以下内容:

      "{\"d_obs\": 1999, \"f_name\": \"p_add\", \"f_str\": \"CCD\", \"d_left\": 48.9, \"d_pos_label\": \"YES\", \"left\": [48.9], \"cat\": [\"40/207, \\"Shiva 居住地\\",靠近 iscon 大型购物中心,S.G. Highway\"], \"obs\": [1999]}"

      【讨论】:

      • 谢谢,但我知道问题所在。括号内是字符串的单个元素,我不能分成多个。
      • 在这种情况下,您需要使用以下字符串:"{\"d_obs\": 1999, \"f_name\": \"p_add\", \"f_str\": \"CCD \", \"d_left\": 48.9, \"d_pos_label\": \"YES\", \"left\": [48.9], \"cat\": [\"40/207, \\"Shiva居住\\", 近 iscon 大型购物中心, S.G. Highway\"], \"obs\": [1999]}"
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 2019-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多