2013-07-09 66 views
2

我曾尝试:转换JSON在红宝石字符串或哈希

require 'net/http' 
require 'json' 
require 'pp' 
require 'uri' 

url = "http://xyz.com" 
resp = Net::HTTP.get_response(URI.parse(url)) 
buffer = resp.body 
result = JSON.parse(buffer) 
#result.to_hash 
    #pp result 
puts result 

,并得到了输出:

{"id"=>"ABC", "account_id"=>"123", "first_name"=> "PEUS" } 

JSON格式,但我只需要id值可以打印, ABC

回答

11

在JSON你传入字符串看起来像:

{"id":"ABC","account_id":"123","first_name":"PEUS"} 

与JSON解析后,它的哈希:

{"id"=>"ABC", "account_id"=>"123", "first_name"=> "PEUS" } 

所以,我会用:

hash = {"id"=>"ABC", "account_id"=>"123", "first_name"=> "PEUS" } 
hash['id'] # => "ABC" 

这里的更紧凑的版本:

require 'json' 

json = '{"id":"ABC","account_id":"123","first_name":"PEUS"}' 
hash = JSON[json] 
hash['id'] # => "ABC" 

注意我正在使用JSON[json]。 JSON []类方法足够聪明,可以感知传入的参数是什么。如果它是一个字符串,它将解析字符串。如果它是一个数组或哈希,它会序列化它。我发现这很方便,因为它允许我写JSON[...],而不必记住我是解析还是使用to_json什么的。使用它是the first virtue of programmers的一个例子。

+0

我们是否可以自动执行流程,而不是手动选择JSON并将其映射为散列。我不想为数千条记录手动执行相同操作。 – user2377245

+0

这就是为什么我们编写代码来自动化任务。你还没有描述你的额外需求,所以我帮不了你。我建议学习如何获取目录条目,以及打开和读取文件。 –

+0

想,如果我打有多个值,然后我的话我可以在URL;吨硬编码 – user2377245