在Javascript中,对象键不是有序的,而在Ruby中,Hashes enumerate their values in the order that the corresponding keys were inserted。
实际上,似乎是在将JSON对象转换为Ruby Hashes时,Ruby Hash中的键按照JSON数据中的顺序排列,例如:
irb(main):002:0> JSON.parse('{"a": 1, "b": 2}')
=> {"a"=>1, "b"=>2}
irb(main):005:0> JSON.parse('{"b": 1, "a": 2}')
=> {"b"=>1, "a"=>2}
我可以依赖这样的假设吗?
我是这么认为的,因为在解析JSON时,我猜解析器会在发现它时插入密钥,但我找不到关于该主题的任何引用。
答案 0 :(得分:0)
依靠这个假设,你可以。 Ruby确实跟踪密钥的顺序。
答案 1 :(得分:0)
至少在较新版本的Ruby中,基于插入保留键顺序。从Ruby 2.6.3 Hash documentation
哈希按插入相应键的顺序枚举其值
(据我所知)所有当前受支持的Ruby版本都是这种情况(即使不支持的旧版2.x版本也如上所述)