Ruby on rails Rails应用程序:我需要从循环中的params构建一个json对象

Ruby on rails Rails应用程序:我需要从循环中的params构建一个json对象,ruby-on-rails,json,loops,Ruby On Rails,Json,Loops,我需要使用params在循环中构建一个json对象 我的情妇看起来像这样 params[:answers] returns => {"1"=>"answer1", "2"=>"answer2"} def build_answersheet_json(params[:answers], params[:survey_id]) params[:answers].keys.each do |question_id| current_question = question

我需要使用params在循环中构建一个json对象

我的情妇看起来像这样

params[:answers]
returns => {"1"=>"answer1", "2"=>"answer2"}
def build_answersheet_json(params[:answers], params[:survey_id])
  params[:answers].keys.each do |question_id|
    current_question = question_id
    current_answer = params[:answers][question_id]
  end
end
{
  survey_id: '1',
  answers: {
    question: [{
      question_id: 1,
      answer: 'answer1'
    }, {
      question_id: 2,
      answer: 'answer2'
      }]
  }
}
build_answersheet_json(params[:answers], params[:survey_id])
这个json对象中的键是调查问题的id

所以我计划通过循环键来构建json对象,如下所示

params[:answers]
returns => {"1"=>"answer1", "2"=>"answer2"}
def build_answersheet_json(params[:answers], params[:survey_id])
  params[:answers].keys.each do |question_id|
    current_question = question_id
    current_answer = params[:answers][question_id]
  end
end
{
  survey_id: '1',
  answers: {
    question: [{
      question_id: 1,
      answer: 'answer1'
    }, {
      question_id: 2,
      answer: 'answer2'
      }]
  }
}
build_answersheet_json(params[:answers], params[:survey_id])
由于我在迁移过程中使用“t.json”将json保存到postgres,所以我想使用提取的问题id和答案来构建一个json对象,看起来像这样

params[:answers]
returns => {"1"=>"answer1", "2"=>"answer2"}
def build_answersheet_json(params[:answers], params[:survey_id])
  params[:answers].keys.each do |question_id|
    current_question = question_id
    current_answer = params[:answers][question_id]
  end
end
{
  survey_id: '1',
  answers: {
    question: [{
      question_id: 1,
      answer: 'answer1'
    }, {
      question_id: 2,
      answer: 'answer2'
      }]
  }
}
build_answersheet_json(params[:answers], params[:survey_id])
我一直试图用一种看起来像这样的方法来做这件事

params[:answers]
returns => {"1"=>"answer1", "2"=>"answer2"}
def build_answersheet_json(params[:answers], params[:survey_id])
  params[:answers].keys.each do |question_id|
    current_question = question_id
    current_answer = params[:answers][question_id]
  end
end
{
  survey_id: '1',
  answers: {
    question: [{
      question_id: 1,
      answer: 'answer1'
    }, {
      question_id: 2,
      answer: 'answer2'
      }]
  }
}
build_answersheet_json(params[:answers], params[:survey_id])
我尝试了JSON.parse(),并试图从逻辑上解决它,但我似乎无法解决这个问题


非常感谢您的帮助。

如果Json的结构如下所示,则可能无法解析Json:

survey = {
}
Json不能包含
=
和赋值


使用
puts varname检查实变量值。在遇到意外行为的代码行附近检查

如果Json具有如下结构,则可能无法解析Json:

survey = {
}
Json不能包含
=
和赋值


使用
puts varname检查实变量值。在遇到意外行为的代码行附近检查

也许您可以尝试以下方法:

/* fake params (to test) */
params = {
    survey_id: '1',
    answers: {
        "1"=>"answer1", 
        "2"=>"answer2", 
        "3"=>"answer3", 
        "4"=>"answer4"
    }
}

def build_answersheet_json(answers, survey_id)
  {
    survey_id: survey_id,
    answers: answers.map { |k,v| { question_id: k.to_i, answer: v } }
  }
end


survey = build_answersheet_json(params[:answers], params[:survey_id])

puts survey.class 
#Hash

puts survey.to_json
# formated JSON string:
# {
#   "survey_id":"1",
#   "answers":[
#       {"question_id":1,"answer":"answer1"},
#       {"question_id":2,"answer":"answer2"},
#       {"question_id":3,"answer":"answer3"},
#       {"question_id":4,"answer":"answer4"}
#   ]
# }
YourModel.create(survey: survey)
为了保存为
t.json
postgress列类型,只需传递Hash
survey
对象,如下所示:

/* fake params (to test) */
params = {
    survey_id: '1',
    answers: {
        "1"=>"answer1", 
        "2"=>"answer2", 
        "3"=>"answer3", 
        "4"=>"answer4"
    }
}

def build_answersheet_json(answers, survey_id)
  {
    survey_id: survey_id,
    answers: answers.map { |k,v| { question_id: k.to_i, answer: v } }
  }
end


survey = build_answersheet_json(params[:answers], params[:survey_id])

puts survey.class 
#Hash

puts survey.to_json
# formated JSON string:
# {
#   "survey_id":"1",
#   "answers":[
#       {"question_id":1,"answer":"answer1"},
#       {"question_id":2,"answer":"answer2"},
#       {"question_id":3,"answer":"answer3"},
#       {"question_id":4,"answer":"answer4"}
#   ]
# }
YourModel.create(survey: survey)

来源:

也许你可以试试这样的东西:

/* fake params (to test) */
params = {
    survey_id: '1',
    answers: {
        "1"=>"answer1", 
        "2"=>"answer2", 
        "3"=>"answer3", 
        "4"=>"answer4"
    }
}

def build_answersheet_json(answers, survey_id)
  {
    survey_id: survey_id,
    answers: answers.map { |k,v| { question_id: k.to_i, answer: v } }
  }
end


survey = build_answersheet_json(params[:answers], params[:survey_id])

puts survey.class 
#Hash

puts survey.to_json
# formated JSON string:
# {
#   "survey_id":"1",
#   "answers":[
#       {"question_id":1,"answer":"answer1"},
#       {"question_id":2,"answer":"answer2"},
#       {"question_id":3,"answer":"answer3"},
#       {"question_id":4,"answer":"answer4"}
#   ]
# }
YourModel.create(survey: survey)
为了保存为
t.json
postgress列类型,只需传递Hash
survey
对象,如下所示:

/* fake params (to test) */
params = {
    survey_id: '1',
    answers: {
        "1"=>"answer1", 
        "2"=>"answer2", 
        "3"=>"answer3", 
        "4"=>"answer4"
    }
}

def build_answersheet_json(answers, survey_id)
  {
    survey_id: survey_id,
    answers: answers.map { |k,v| { question_id: k.to_i, answer: v } }
  }
end


survey = build_answersheet_json(params[:answers], params[:survey_id])

puts survey.class 
#Hash

puts survey.to_json
# formated JSON string:
# {
#   "survey_id":"1",
#   "answers":[
#       {"question_id":1,"answer":"answer1"},
#       {"question_id":2,"answer":"answer2"},
#       {"question_id":3,"answer":"answer3"},
#       {"question_id":4,"answer":"answer4"}
#   ]
# }
YourModel.create(survey: survey)
来源:

试试看

{
  survey: ¯\_༼◉ل͟◉༽_/¯,
}
试一试


对不起,调查={}不应该在那里。我只希望最后一个对象看起来像“=”后面的东西,我将编辑这个问题。对不起,调查={}不应该在那里。我只希望最后一个对象看起来像“=”后面的东西,我将编辑这个问题。这看起来很有希望。谢谢你的快速回复。我现在得睡觉了,明天早上我会把它做完的。谢谢!这很有效。谢谢你引用这篇文章!这看起来很有希望。谢谢你的快速回复。我现在得睡觉了,明天早上我会把它做完的。谢谢!这很有效。谢谢你引用这篇文章!