замена значения в массиве json на sinatra - PullRequest
0 голосов
/ 23 марта 2011

У меня есть записи с полем «ресурс», которое может содержать несколько ресурсов.Когда я возвращаю эти данные, мне нужно перебрать это поле и вернуть индивидуальную запись для каждого значения в поле.В настоящее время я использую 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

Любая помощь с благодарностью.Спасибо Крис

Ответы [ 2 ]

1 голос
/ 23 марта 2011

если вы используете рубиновый гем "json", вы можете преобразовать строку json в хешв строку JSON:

new_json_string = converted_hash.to_json
0 голосов
/ 23 марта 2011

По сути, 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...