使用JSON.parse将JSON对象中的键顺序转换为Ruby Hash

时间:2015-08-06 08:34:53

标签: ruby json

在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时,我猜解析器会在发现它时插入密钥,但我找不到关于该主题的任何引用。

2 个答案:

答案 0 :(得分:0)

依靠这个假设,你可以。 Ruby确实跟踪密钥的顺序。

答案 1 :(得分:0)

至少在较新版本的Ruby中,基于插入保留键顺序。从Ruby 2.6.3 Hash documentation

  

哈希按插入相应键的顺序枚举其值

(据我所知)所有当前受支持的Ruby版本都是这种情况(即使不支持的旧版2.x版本也如上所述)