[英]replacing a value in a json array with sinatra
我有一個帶有“資源”字段的記錄,其中可以包含多個資源。 當我返回這些數據時,我需要遍歷該字段並為該字段中的每個值返回一條單獨的記錄。 我目前正在使用sinatra,可以在字段上進行交互,但是我很難替換json數組中的字段。
例如事件:名稱資源:resourceA,resourceB,resourceC
該記錄需要作為3個uniqe記錄/事件返回,每個記錄只有一個資源。
使用下面列出的代碼,我得到了三個記錄,但是所有三個記錄都返回了相同的資源值(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
任何幫助是極大的贊賞。 謝謝克里斯
如果您使用ruby gem“ json”,則可以將json字符串轉換為哈希
require 'json'
converted_hash = JSON(json_string).to_hash
這應該更容易管理。
然后,您可以將哈希值轉換為JSON字符串:
new_json_string = converted_hash.to_json
基本上,發生的事情是ruby將所有三個記錄視為同一記錄,因此在一個記錄上更新哈希值時,它會影響從同一文檔創建的所有其他記錄。 為了解決這個問題,我非常需要每次創建一個重復的記錄並修改它的值。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.