我有一个'资源'字段的记录,可以包含多个资源。当我返回此数据时,我需要迭代此字段并返回字段中每个值的单个记录。我目前正在使用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
非常感谢任何帮助。 谢谢 克里斯
答案 0 :(得分:1)
如果你使用ruby gem“json”,你可以将json字符串转换为哈希
require 'json'
converted_hash = JSON(json_string).to_hash
这应该更容易管理。
然后,您可以将哈希值转换为JSON字符串:
new_json_string = converted_hash.to_json
答案 1 :(得分:0)
基本上正在发生的事情是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