gpt4 book ai didi

Ruby 哈希、鸭子类型和 JSON 反序列化

转载 作者:太空宇宙 更新时间:2023-11-03 18:11:25 25 4
gpt4 key购买 nike

我是 Ruby 的新手,目前正在发现它与 Java 的不同之处,请考虑以下代码片段:

file = File.new('test.json', 'w')
hash = {}
hash['1234'] = 'onetwothreefour_str'
hash[1234] = 'onetwothreefour_num'

puts hash.to_json
file.write(hash.to_json)
file.close

str = File.read('test.json')
puts str
puts JSON.parse(str)

输出

{"1234":"onetwothreefour_str","1234":"onetwothreefour_num"}
{"1234":"onetwothreefour_str","1234":"onetwothreefour_num"}
{"1234"=>"onetwothreefour_num"}

所以,在反序列化之后,我们在散列中少了一个对象。现在,问题 - 这是正常行为吗?我认为存储在不同类型的散列键中是完全合法的。如果是这样,那么 JSON.parse 不应该将文件键写入“1234”和 1234 吗?

需要说明的是——我明白拥有相同类型的键会更好,我只是看到在恢复我的对象后它们是字符串而不是数字。

最佳答案

是的,ruby 哈希可以有任何类型的键。

另一方面,JSON 规范规定对象键必须是字符串,不允许其他类型。

这就解释了您观察到的输出:在序列化时,整数键变成了一个字符串,使其成为另一个键的副本。回读时,重复的键被删除(最后一个获胜,IIRC)。如果您尝试从 javascript 使用该 json,我敢肯定您会得到相同的行为。

关于Ruby 哈希、鸭子类型和 JSON 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33413458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com