我有一个动态创建的数组,如下所示:
napSchema.find({ pillows: 2 }, function(err, napTasks) {
// ...
});
我正在尝试创建一个最终看起来像这样的json对象:
ids = [111,333,888]
所以我在repl中测试时尝试了这个:
{
"cars": [{
"id": "111"
}, {
"id": "333"
}, {
"id": "888"
}]
}
不起作用。我不知道如何做到这一点的最好方法。我需要遍历数组吗?
答案 0 :(得分:1)
因此,如果您想将ID转换为字符串,则不是很清楚。我假设没有,但如果你想把它们作为字符串,只需在地图中的i调用中添加.to_s
。
因此,从输出向后工作,我看到你有一个带有一个键的哈希值,值是一个键值哈希的数组。从那以后,我做了一个等价的ruby结构,hash =>哈希数组。
require 'json'
{ cars: [111,333,888].map do |i|
{ id: i }
end
}.to_json
=> "{\"cars\":[{\"id\":111},{\"id\":333},{\"id\":888}]}"
如果你在铁轨中,你不需要要求json。
对于红宝石,因为一切都是一个物体,你可以把它变成有效的单线。鉴于缺乏背景,我不能说这是否有意义。
如果你在一个对象中,你可能想要将id哈希的构建分解为一个新方法并调用它。如果它的Rails和id实际上处于您正在抓取的ActiveRecord关系中,您可以执行以下操作:
{ users: User.select(:id).first(3) }.to_json
User Load (0.3ms) SELECT `users`.`id` FROM `users` ORDER BY `users`.`id` ASC LIMIT 3
=> "{\"users\":[{\"id\":1},{\"id\":2},{\"id\":3}]}"
显然不是与你的情况完美匹配,但你应该可以从那里跑。
答案 1 :(得分:1)
我建议您使用方法Array#product。
{ "cars": ["id"].product(ids).map { |k,v| { k=>v } } }
#=> {:cars=>[{"id"=>111}, {"id"=>333}, {"id"=>888}]}
或
{ "cars": ["id"].product(ids).map { |a| [a].to_h } }
#=> {:cars=>[{"id"=>111}, {"id"=>333}, {"id"=>888}]}
然后应用to_json
。
答案 2 :(得分:0)
也许这会有所帮助。
你可以像这样创建那个哈希。
car_hash = {:cars => (['id']*(ids.size)).zip(ids).map {|k, v| { k => v} }}
您可以将其转换为json。
require 'json'
car_hash.to_json