2014-07-24 36 views
0
{ 
    "TOTAL" : "520" 

    , 

    "PROD_101379" : { 
    "IMG" : "1406301107587209.jpg", 
    "NAME" : "hello sunny", 
    "LINK" : "/product/productDetail.do?seq=101379", 
    "SEQ" : "101379", 
    "PRICE" : "18000", 
    "MILEAGE" : "2" 
    } 
    , 

    "PROD_101378" : { 
    "IMG" : "", 
    "NAME" : "special gift", 
    "LINK" : "/product/productDetail.do?seq=101378", 
    "SEQ" : "101378", 
    "PRICE" : "3000", 
    "MILEAGE" : "2" 
    } 
    , 

    "PROD_101376" : { 
    "IMG" : "1405020190326241.jpg", 
    "NAME" : "it radiant", 
    "LINK" : "/product/productDetail.do?seq=101376", 
    "SEQ" : "101376", 
    "PRICE" : "45000", 
    "MILEAGE" : "2" 
    } 
    , 

    "PAGER" : "<div class="paging"><a href="javascript:pageForm('0'); 

} 

我正在學習如何在Ruby中編程,使用Nokogiri gem來解析互聯網數據。ruby​​ POST請求Json結構化數組或散列值爲CSV

以上數據是在使用Net/HTTP請求POST後收到的,然後使用Json gem進行解析。

JSON.parse(x.body) 

我試圖把這些數據轉化爲CSV像這樣:

IMG | Name | Link | SEQ | Price | Mileage | 

每個PROD_xxxxxx陣列。

我讀過的寶石文檔,又看了看其他的問題在這裏認識到,很像引入nokogiri解析HTML(或更像陣列&哈希),我應該能夠解析JSON格式。

我發現我可以用得到的東西價值:

json_parsed["TOTAL"] 

這會給我「520」

我得到使用相同的方法來獲得在「PROD_xxxxxx」嵌套的數據,但是這隻會給我這個名字的特定嵌套數據。

我希望能夠通過他們循環,所以我想是這樣

json_parsed["PROD*"].each do |each| 

,但看起來這是不使用的語法的正確方法。

如果我可以通過每個迴路並獲得「IMG」,「姓名」,「LINK」,......等等,我想使用CSV到:

CSV.open(fname,"w") do |csv| 
    Json_parsed[each-PROD].each do |each| 
    name = each["NAME"] 
    img = each["IMG"] 
    csv << [name, img] 
    end 
end 

但是,如果有一個比上述方法更好的方式將JSON數據轉換爲CSV(也許這是可能的,因爲JSON是結構化數據,如CSV?)我會很感激這個建議。

感謝,

+0

你想達到什麼目的嗎? –

+0

[這不是「爲我寫代碼」網站](http://mattgemmell.com/what-have-you-tried/)。 – mudasobwa

+0

@mudasobwa我需要一個關於如何解決上述問題的方向。我的問題的哪一部分是要求「爲我寫代碼?」您的評論或評論不是很有幫助。如果你認爲我應該以這樣的方式提問,或者分享我的嘗試,我會感激你的建議。 – Rok

回答

0

最簡單的方法就是通過PROD_*鍵的值進行迭代:

h = '{ ... }': 

require 'json' 

hash = (JSON.parse h).select { |k,v| k =~ /PROD_/ } # select PROD_* only 

require 'csv' 

CSV.open('filename', 'w') do |csv| 
    csv << ['IMG', 'Name', 'Link', 'SEQ', 'Price', 'Mileage'] 
    hash.each { |k,v| 
    csv << v.values 
    } 
end 

希望它能幫助。

+0

謝謝,我想我的方向不是太離開=] – Rok

+0

當然。你證明你已經付出了一些努力,我們在這裏幫助解決粗糙問題。現在,整個頁面可能對來自Google的用戶有所幫助。 – mudasobwa

相關問題