【问题标题】:Can I Rely on the Order of a JSON Array? [duplicate]我可以依赖 JSON 数组的顺序吗? [复制]
【发布时间】:2017-06-07 05:45:08
【问题描述】:

很明显,我不能依赖 JSON 中键值对的顺序。例如,JSON 解析器可以解释

{
    "someKey" : "someValue",
    "anotherKey" : "anotherValue",
    "evenAnotherKey" : "evenAnotherValue"
}

作为

{
    "anotherKey" : "anotherValue",
    "someKey" : "someValue",
    "evenAnotherKey" : "evenAnotherValue"
}

合法,但我可以依赖 JSON 数组 的顺序吗?例如,JSON 解析器能否解释

{
    "arrayKey" : ["firstElement", "secondElement", "thirdElement"]
}

作为

{
    "arrayKey" : ["secondElement", "firstElement1", "thirdElement"]
}

合法吗?我想不会,但我的朋友告诉我我错了。

【问题讨论】:

  • 您询问的是 JSON 数组,但谈论的是 JavaScript 编译器。你在处理 JSON 还是 JavaScript?
  • @Quentin 我的意思是解析器。我将编辑问题。

标签: javascript json


【解决方案1】:

是的,你可以!制作了数组,因此顺序很重要!这就是将对象与数组分开的原因。尤其是在 JS 和 JSON 中。

【讨论】:

    【解决方案2】:

    数组和列表总是有序的。这就是数组和列表的意义所在——它们的位置它们的索引。


    顺便说一句,从 ES5 开始,对象的顺序(你称之为键值对)也得到了保证。但不是直截了当。

    对于对象,任何数字键都将在非数字键之前排序,并且将按数字排序。但所有其他键都保证按插入顺序排列。所以下面的对象:

    {
      hello : "world",
      foo : "bar",
      "22" : "first"
    }
    

    必须返回为:

    {
      "22" : "first",
      hello : "world",
      foo : "bar"
    }
    

    目前所有浏览器都支持这个,node.js 支持这个,但不是所有的 javascript 交叉编译器(比如 Babel)都支持。

    我个人不喜欢将对象等无序数据结构视为有序。但看起来js社区不同意。例如,Go 故意随机化地图的顺序,以防止人们依赖语言实现的任何意外的稳定顺序。

    【讨论】:

      猜你喜欢
      • 2020-07-22
      • 2016-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      • 2014-12-02
      相关资源
      最近更新 更多