Al intentar crear un mensaje JSON para una API, me encontré luchando por hacer algo que pensé que sería simple. Necesitaba crear un mensaje como el siguiente:
{ "list": [ { "foo": 1, "bar": 2 } ] }
Sin embargo, mi primer intento no funcionó:
say to-json { foo => [ { a => 1, b => 2 } ] };
# {"foo":[{"a":1},{"b":2}]}
Intentar simplificar las cosas me confundió aún más:
say { foo => [ { a => 1 } ] };
# {foo => [a => 1]}
# Note that this is not JSON, but I expected to see curly braces
Luego intenté usar algunas variables temporales, y eso funcionó:
my @list = { a => 1 };
say to-json { foo => @list };
# {"foo":[{"a":1}]}
my %hash = ( a => 1 );
say to-json { foo => [ %hash ] };
# {"foo":[{"a":1}]}
¿Que está pasando aqui?
¿Y hay alguna manera de lograr el resultado deseado sin una variable temporal adicional?
say to-json { foo => [ a => 1 ] }
salidas, {"foo":[{"a":1}]}
así que quién sabe lo que escribí cuando lo obtuve, si alguna vez lo hice. ¡Culpa mía!
say to-json { foo => [ { a => 1 } ] };
debería mostrar algo como{"foo":[{"a":1}]}
, no{"foo":["a":1]}
. Este último es un error tipográfico, ¿verdad? Si no, ¿quésay $*PERL.compiler.version;
dice?