【问题标题】:JSON.parse on array of JSON strings not doing as expectedJSON.parse 上的 JSON 字符串数组未按预期执行
【发布时间】:2012-11-28 13:50:59
【问题描述】:

我是 javascript 新手,所以学习其中的一些东西是如何工作的。

我有一个看起来像这样的字符串:["{\"name\":\"name\"}","{\"name\":\"Rick\"}"]

如果我 JSON.parse() 不应该返回具有名称属性的对象数组吗?

我得到的是一个数组中的 2 个元素,但它们只是 JSON 字符串。它们不是具有属性名称的对象。我错过了什么?

[编辑] 我在对象上调用 stringify() ,然后将其传递给数组,而不是仅仅将对象按原样传递给数组。然后我 stringify() 数组。我正在对一个 stringify 进行字符串化,这导致它放置了转义字符:)

【问题讨论】:

  • 提示,交替使用 ' 和 " 字符。如果 ' 或 " 分别位于 ""'' 的字符串中,则不必转义。 IE。 '[{"name":"name"},{"name":"Rick"}]'

标签: javascript json


【解决方案1】:

如果我 JSON.parse() 不应该返回一个具有 name 属性的对象数组?

不,看起来 JSON 定义了一个包含两个字符串的数组。

这是一个包含两个字符串的数组的 JSON:

[
    "{\"name\":\"name\"}",
    "{\"name\":\"Rick\"}"
]

在 JavaScript 字符串文字形式中,即'["{\"name\":\"name\"}","{\"name\":\"Rick\"}"]'

这是一个包含两个对象的数组的 JSON:

[
    {
        "name": "name"
    },
    {
        "name": "Rick"
    }
]

在 JavaScript 字符串文字形式中,应该是 '[{"name":"name"},{"name":"Rick"}]'

【讨论】:

  • 这很奇怪,因为我没有手动添加那些转义字符。当我 stringify() 一个数组时,它们似乎是自动添加的。在 Win 8 上使用 IE 10 进行测试。
  • tmp.push(JSON.stringify(data));其中数据是一个对象。 tmp 看起来很正常。它包含 JSON 字符串的 1 个元素,并且在 VS 中看起来很正常。在调用 localStorage.setItem(tbl.name, JSON.stringify(tmp));并在 localStorage 中查看它现在有转义字符。
  • @user441521:我希望这与您正在查看的字符串有关。例如,在 Chrome 的控制台中,JSON.stringify([{"foo":"bar"}]) 输出 "[{"foo":"bar"}]"(请注意它是如何在字符串周围加上引号,而不是在字符串中转义引号,如果你复制粘贴它会出错)。 JSON.stringify 在 IE9 (example) 上正常工作,我看不出有任何理由相信它在 IE10 上不能正常工作。希望这会有所帮助,
  • 我发现了问题。我在将对象添加到数组时对它进行字符串化(),然后对数组进行字符串化()。我只是将其更改为将对象按原样推送到数组并将 stringify() 保留在数组上并且它可以工作!谢谢!
  • @user441521:啊,这很有道理。很高兴你知道了!
【解决方案2】:

我猜它应该是:

"[{\"name\":\"name\"},{\"name\":\"Rick\"}]"

【讨论】:

    【解决方案3】:

    如果你丢失了根元素周围的(转义)引号,你可能会得到你想要的。

    例如像

    "[{"name":"name"},{"name":"Rick"}]"
    

    【讨论】:

      猜你喜欢
      • 2015-12-14
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-21
      相关资源
      最近更新 更多