簡體   English   中英

用sinatra替換json數組中的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM