2011-07-21 115 views
0

Ruby還是新手 - 如果已經提出了這個問題,我會提前道歉。ruby​​解析HTTParty數組 - json

我正在使用HTTParty從API獲取數據,並且它正在返回一個JSON數據數組,我無法完全弄清楚如何解析。

#<Net::HTTPOK:0x1017fb8c0> 
{"ERRORARRAY":[],"DATA":[{"ALERT":1,"LABEL":"hello","WATCHDOG":1},{"LABEL":"goodbye","WATCHDOG":1} 

我想第一個問題是我真的不知道我在看什麼。當我做response.class時,我得到HTTParty::Response。它似乎是一個數組中的哈希?我不確定。無論如何,我想要一種方法來爲每個單獨的數組獲取「LABEL」,所以結果將是"hello", "goodbye".我該怎麼做呢?

回答

1

你不需要解釋它說每一個。你可以做的是用'=>'替換':'並評估它。

例如:假設您有["one":"a","two":"b"],您可以將s設置爲等於該字符串,並且eval s.gsub(/^\[/, '{').gsub(/\]$/, '}').gsub('":', '"=>')會生成紅寶石散列(檢查顯示{「one」=>「a」,「two」=>「b」} )

或者,你可以做這樣的事情

require 'json' 

string_to_parse = "{\"one\":\"a\",\"two\":\"b\"}" 

parsed_and_a_hash = JSON.parse(string_to_parse) 

parsed_and_a_hash是一個哈希!

+0

這是偉大的,我看到它要去哪裏。出於某種原因,我無法安裝json gem(整個其他問題)。當我得到正則表達式的紅寶石哈希,我如何訪問哈希中的元素?我將如何列出一個鍵的所有值? – rick

+0

如果你有一個散列,從我的例子中說,你可以用'parsed_and_a_hash [「one」]'來訪問對應於鍵「one」的值。看到所有的鍵,就像這樣調用「keys」方法:'parsed_and_a_hash.keys' –

0

如果這是JSON,那麼你最好的選擇是安裝一個處理JSON格式的庫。重新發明輪子確實沒有意義(儘管它有趣)。看看this的文章。

如果您知道JSON數據將始終處於完全相同的格式,那麼您可以在沒有JSON寶石的情況下管理相對簡單的事情。但我不確定這是值得的麻煩。

0

如果您在使用json寶石掙扎,請考慮使用Crack寶石。它還具有解析xml的額外好處。

require 'crack' 
my_hash_array = Crack::JSON.parse(my_json_string) 

my_hash_array = Crack::XML.parse(my_xml_string)