2012-03-03 25 views
5

Tengo el siguiente:¿Cómo se genera una matriz como JSON?

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

Me gustaría ser capaz de dar formato a que:

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

¿Cómo puedo tener la salida @array en el ??????? espacio como un ids?

Gracias

+0

Las claves de un hash son únicas. Al probar esto, solo obtendrá uno de esos valores para ': id'. ¿Estás seguro de que no estás pidiendo una lista de ID en su lugar? – jdl

+0

Eso es probablemente cierto, pero así es como lo lleva la gema de LinkedIn. ¿Alguna idea sobre cómo puedo formatear la matriz en ese tipo de salida? – AnApprentice

Respuesta

11

{:id => "x1", :id => "x2", :id => "adad" } no es un hash válida ya que tiene un choque clave

que debe ser similar:

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

Actualización:

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

entonces usted puede hacer b.to_json, suponiendo que haya hecho require "json" ya

+0

Eso probablemente sea cierto, pero así es como lo lleva la gema de LinkedIn. ¿Alguna idea sobre cómo puedo formatear la matriz en ese tipo de salida? – AnApprentice

+0

¿Podría darnos un ejemplo? – Zepplock

+0

Claro, ¿qué tipo de ejemplo? – AnApprentice

1

Bueno ordinariamente se podría hacer algo como esto:

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

Pero eso dará lugar a {: id => "Adad"} porque el primer elemento perforará todos los demás: los hashes de rubí tienen llaves únicas Así que no creo que haya una forma estupenda de hacer esto de forma espontánea.

Cuestiones relacionadas