2013-04-22 88 views
1

作爲一名編程初學者,我試圖在大學時爲我的碩士論文過濾JSON文件。該文件包含大約500哈希值,其中115是我感興趣的是那些使用Ruby過濾大型json文件

我想要做什麼:

(1)過濾的文件,並選擇我感興趣的

哈希( 2)對於每一個選擇的哈希,僅返回某些特定鍵

與散列(「貸款」陣列的形式)包括:

{"header": { 
    "total":546188, 
    "page":868, 
    "date":"2013-04-11T10:21:24Z", 
    "page_size":500}, 
"loans": [{ 
    "id":427853, 
    "name":"Peter Pan", 
    ..., 
    "status":"expired", 
    "paid_amount":525, 
    ..., 
    "activity":"Construction Supplies", 
    "sector":"Construction"," }, 
    ... ] 
} 

作爲S pecific,我想有以下幾點:

(1)過濾出來的「貸款」與「狀態」散列:「過期」

(2)返回爲每個這樣的「過期」只貸某些鍵: 「ID」, 「姓名」, 「活動」,...

(3)最後,出口所有到一個文件,我可以在Excel或一些統計軟件(SPSS或Stata的)分析

我自己到目前爲止提出的是:

require 'rubygems' 
require 'json' 

toberead = File.read('loans_868.json') 
another = JSON.parse(toberead) 

read = another.select {|hash| hash['status'] == 'expired'} 

puts hash 

這顯然完全不完整。我感覺完全失去了。 現在,我不知道在哪裏以及如何繼續。儘管有谷歌搜索和通讀噸如何過濾JSON文章...

有沒有人可以幫助我呢?

回答

1

JSON將被解析爲一個哈希,'頭'是一個關鍵,'貸款'是另一個關鍵。

所以你的JSON.parse行之後,你可以做

loans = another['loans'] 

現在貸款是哈希的數組,每個哈希代表你的貸款之一。 然後你可以做

expired_loans = loans.select {|loan| loan['status'] == 'expired'} 
puts expired_loans 

得到你想要的輸出。