2012-03-03 152 views
5

我有以下几点:如何将数组输出为JSON?

@array.inspect 
["x1", "x2", "adad"] 

我希望能够将其格式化到:

client.send_message(s, m, {:id => "x1", :id => "x2", :id => "adad" }) 
client.send_message(s, m, ???????) 

我怎么能在该@array输出???????空间作为IDS?

感谢

+0

散列的键是唯一的。如果你尝试这样做,你最终只会得到':id'的其中一个值。你确定你没有要求提供一个ID列表吗? – jdl 2012-03-03 00:36:21

+0

这可能是事实,但这就是LinkedIn宝石所采用的方式。关于如何将数组格式化为该类型的输出的任何想法? – AnApprentice 2012-03-03 00:37:59

回答

11

{:id => "x1", :id => "x2", :id => "adad" }不是一个有效的哈希,因为你有一个关键的碰撞

它应该看起来像:

{ 
    "ids": ["x1", "x2", "x3"] 
} 

更新:

@a = ["x1", "x2", "adad"] 
@b = @a.map { |e| {:id => e} } 

然后,你可以做b.to_json,假设您已完成require "json"已经

+0

这可能是事实,但这正是LinkedIn宝石所采用的方式。关于如何将数组格式化为该类型的输出的任何想法? – AnApprentice 2012-03-03 00:37:45

+0

你能提供一个例子吗? – Zepplock 2012-03-03 00:42:14

+0

当然,什么样的例子? – AnApprentice 2012-03-03 00:42:55

1

那么通常你可以做这样的事情:

Hash[@array.collect{|i| [:id, i]}] 

但是,这将导致{:ID =>“阿达德”},因为第一个元素将冲所有的休息:在红宝石哈希有独特的钥匙。所以我不认为有这样一个非常棒的方法可以做到这一点。