2011-03-23 61 views
0

我有一個包含多個資源的'resource'字段的記錄。當我返回這些數據時,我需要迭代這個字段併爲字段中的每個值返回一個單獨的記錄。我目前正在使用sinatra,並且能夠在字段之間進行交互,但是我很難替換json數組中的字段。用sinatra替換json數組中的值

例如 事件:名稱 資源:resourceA,resourceB,resourceC

這個記錄需要與每個記錄只有一個資源返回爲3潮頭記錄/事件。

隨着代碼如下,我得到三個記錄,但所有三個記錄都具有相同的資源值(resourceC)

這裏是我的代碼

docs = @db.view('lab/events', :startkey => params[:startDate], :endkey => endSearch)['rows'] 
rows = Array.new 
docs.each do |doc| 
    resources = doc['value']['resources'].split(",") 
    resources.each do |r| 
    doc['value']['resources'] = r 
    rows.push(doc['value']) 
    end 
end 

任何幫助是極大地回來了讚賞。 感謝 克里斯

回答

1

如果使用紅寶石寶石「JSON」你可以將JSON字符串轉換爲哈希

require 'json' 
converted_hash = JSON(json_string).to_hash 

這應該是更容易管理。

然後,您可以打開哈希JSON字符串:

new_json_string = converted_hash.to_json 
0

基本上正在發生的事情是紅寶石看到所有三個記錄爲同一記錄,以便作爲哈希值是一個記錄,它會影響更新從同一個文檔創建的所有其他記錄。爲了解決這個問題,我每次都需要創建一個重複記錄並修改它的值。

docs = @db.view('lab/events', :startkey => params[:startDate], :endkey => endSearch)['rows'] 
    rows = Array.new 
    docs.each do |doc| 
    resources = doc['value']['resources'].split(",") 
    resources.each do |r| 
     newDoc = doc['value'].dup # <= create a duplicate record and update the value 
     newDoc["resources"] = r 
     rows.push(newDoc) 
    end 
    end