0

我正在从似乎在 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 命令正在工作,我可以使用它们,但令人不安的是它扰乱了对象的条目和顺序。

4

1 回答 1

0

尽管数据以字符串形式显示为有序,但它表示的是无序数据集。该行:

parsed = JSON.parse(data_out)

您使用的是将字符串形式转换为 Ruby 中可用内容的正确方法。我无法从您的示例中看到完整的结构,所以我不知道顶层是数组还是基于 id 的哈希。我怀疑后者,因为您说从 Ruby 中查看时它变得无序。因此,如果您知道您对地址的哪一部分感兴趣,您可能会有如下代码:

# Writes all the cities
parsed.each do |id,data|
   puts data["city"]
end

如果外部结构是一个数组,你会这样做:

# Writes all the cities
parsed.each do |data|
   puts data["city"]
end
于 2013-04-26T06:47:51.360 回答