我尝试使用Jbuilder生成JSON响应
我有一系列像这样的哈希
words= [
{"term": "abc",
"definition": "123"
} ,
{"term": "abc",
"definition": "345"
} ,
{"term": "xyz",
"definition": "890"
}
]
我想将其转换为JSON。 这里的逻辑是将所有术语作为键并将其定义为数组
{
"abc": ["123","345"],
“xyz”: ["890"]
}
到目前为止我取得的成就是
words.each do |word|
json.set! word['text'] ,word['definition']
end
给了我
{
"abc": "123"
"abc": "345",
"xyz": "890"
}
有些人可以帮我解决这个问题。
答案 0 :(得分:0)
您正在寻找类似的内容,
words = [{:term=>"abc", :definition=>"123"}, {:term=>"abc", :definition=>"345"}, {:term=>"xyz", :definition=>"890"}]
words.inject({}) do |h, w|
h[w[:term]] ||= []
h[w[:term]] << w[:definition]
h
end
#=> {"abc"=>["123", "345"], "xyz"=>["890"]}
答案 1 :(得分:0)
words.group_by{|d| d[:term]}.map{|k,v| {k => v.map{|val| val[:definition]}}}.reduce(&:merge)
答案 2 :(得分:0)
words.map(&:values).group_by(&:shift).each do |k, values|
json.set! k, values.flatten
end
如果无法保证:term
和:definition
的顺序,则需要对原始哈希值进行.map(&:sort)
的中间调用,:shift
应该被视为{ {1}}因为排序后:pop
s将在:definition
s之前。
答案 3 :(得分:0)
最简单的解决方案:)
<div class="le-form">
<form method="POST">
<div class="le-input">
<div class="upholder"></div>
<input class="inpt" type="text" name="name" placeholder="Your name">
</div>
<div class="le-input">
<div class="upholder"></div>
<input class="inpt" type="email" name="_replyto" placeholder="Your e-mail address">
</div>
<div class="le-input">
<div class="upholder"></div>
<input class="inpt" type="text" name="phone" placeholder="Your phone number">
</div>
<input type="submit" value="Send" class="form-btn">
</form>
</div>
您的输出将在result_hash
中