【发布时间】:2013-04-25 19:10:54
【问题描述】:
我正在从似乎是 JSON 格式的网页下载内容。这是一个大文件,格式如下:
"address1":"123 Street","address2":"Apt 1","city":"City","state":"ST","zip":"xxxxx","country":"US"
大约有 1000 个这样的条目,每个条目都包含在括号内。当我使用 RestClient.get 下载页面时(open-uri 出于某种原因抛出了 http 500 错误),数据格式如下:
\"address\1":\"123 Street\",\"address2\":\"Apt 1\",\"city\":\"City\",\"state\":\"ST\",\"zip\":\"xxxxx\",\"country\":\"US\"
当我使用 json 类时
parsed = JSON.parse(data_out)
它完全打乱了数据结构中条目的顺序,以及每个条目中对象的顺序,例如:
"address1"=>"123 Street", "city"=>"City", "country"=>"US", "address2"=>"Apt 1"
如果我改用
data_j=data_out.to_json
然后我得到:
\\\"address\\\1":\\\"123 Street\\\",\\\"address2\\\":\\\"Apt 1\\\",\\\"city\\\":\\\"City\\\",\\\"state\\\":\\\"ST\\\",\\\"zip\\\":\\\"xxxxx\\\",\\\"country\\\":\\\"US\\\"
此外,似乎只使用 json 类允许我选择我想要的条目:
parsed[1]["address1"]
=> "123 Street"
data_j[1]["address1"]
TypeError: can't convert String into Integer
from (irb):17:in `[]'
from (irb):17
from :0
知道发生了什么吗?我想既然 json 命令正在工作,我可以使用它们,但令人不安的是它扰乱了对象的条目和顺序。
【问题讨论】:
-
对象是无序的。没有“加扰”,因为没有定义的顺序。
-
to_json 方法只是将内容转储到一个 json 字符串,这就是为什么您不能按照您尝试的方式对其进行索引。您基本上只是使用该方法将您的 json 字符串转换为 json 字符串。
-
啊我明白了,感谢您解释两者之间的区别