Ao tentar criar uma mensagem JSON para uma API, me vi lutando para fazer algo que achava simples. Eu precisava criar uma mensagem como a seguinte:
{ "list": [ { "foo": 1, "bar": 2 } ] }
No entanto, minha primeira tentativa não funcionou:
say to-json { foo => [ { a => 1, b => 2 } ] };
# {"foo":[{"a":1},{"b":2}]}
Tentar simplificar as coisas me confundiu ainda mais:
say { foo => [ { a => 1 } ] };
# {foo => [a => 1]}
# Note that this is not JSON, but I expected to see curly braces
Então eu tentei usar algumas variáveis temporárias, e isso funcionou:
my @list = { a => 1 };
say to-json { foo => @list };
# {"foo":[{"a":1}]}
my %hash = ( a => 1 );
say to-json { foo => [ %hash ] };
# {"foo":[{"a":1}]}
O que está acontecendo aqui?
E existe uma maneira de conseguir a saída desejada sem uma variável temporária extra?
say to-json { foo => [ a => 1 ] }
resultados, {"foo":[{"a":1}]}
para quem sabe o que eu digitei quando recebi, se é que eu já fiz. Foi mal!
say to-json { foo => [ { a => 1 } ] };
deve produzir algo como{"foo":[{"a":1}]}
, não{"foo":["a":1]}
. Este último é um erro de digitação, certo? Se não, o quesay $*PERL.compiler.version;
diz?