2013-07-09 91 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