Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby中奇怪的JSON解析问题_Ruby_Json_Parsing - Fatal编程技术网

Ruby中奇怪的JSON解析问题

Ruby中奇怪的JSON解析问题,ruby,json,parsing,Ruby,Json,Parsing,我正在从一个似乎是JSON格式的网页下载内容。它是一个大文件,格式如下: "address1":"123 Street","address2":"Apt 1","city":"City","state":"ST","zip":"xxxxx","country":"US" \"address\1":\"123 Street\",\"address2\":\"Apt 1\",\"city\":\"City\",\"state\":\"ST\",\"zip\":\"xxxxx\",\"country

我正在从一个似乎是JSON格式的网页下载内容。它是一个大文件,格式如下:

"address1":"123 Street","address2":"Apt 1","city":"City","state":"ST","zip":"xxxxx","country":"US"
\"address\1":\"123 Street\",\"address2\":\"Apt 1\",\"city\":\"City\",\"state\":\"ST\",\"zip\":\"xxxxx\",\"country\":\"US\"
其中大约有1000个条目,每个条目都包含在括号内。当我使用RestClient.get(出于某种原因打开uri时抛出http 500错误)下载页面时,数据的格式如下:

"address1":"123 Street","address2":"Apt 1","city":"City","state":"ST","zip":"xxxxx","country":"US"
\"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命令正在工作,我就可以使用它们,但它扰乱了条目和对象的顺序,这让人感到不安。

尽管数据以字符串形式排列,但它表示无序的数据集。该行:

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

对象是无序的。没有“置乱”,因为没有定义的顺序。to_json方法只是将内容转储到json字符串中,这就是为什么您无法以尝试的方式对其进行索引。你基本上只是用这个方法把你的json字符串转换成json字符串。啊,我明白了,谢谢你解释这两个字符串之间的区别。谢谢,这就是我最后要做的!