Durante il tentativo di creare un messaggio JSON per un'API, mi sono trovato a lottare per fare qualcosa che pensavo fosse semplice. Avevo bisogno di creare un messaggio come il seguente:
{ "list": [ { "foo": 1, "bar": 2 } ] }
Tuttavia, il mio primo tentativo non ha funzionato:
say to-json { foo => [ { a => 1, b => 2 } ] };
# {"foo":[{"a":1},{"b":2}]}
Cercare di semplificare le cose mi ha ulteriormente confuso:
say { foo => [ { a => 1 } ] };
# {foo => [a => 1]}
# Note that this is not JSON, but I expected to see curly braces
Quindi ho provato ad usare alcune variabili temporanee e ha funzionato:
my @list = { a => 1 };
say to-json { foo => @list };
# {"foo":[{"a":1}]}
my %hash = ( a => 1 );
say to-json { foo => [ %hash ] };
# {"foo":[{"a":1}]}
Cosa sta succedendo qui?
E c'è un modo per ottenere l'output desiderato senza una variabile temporanea aggiuntiva?
say to-json { foo => [ a => 1 ] }
uscite, {"foo":[{"a":1}]}
quindi chissà cosa ho digitato quando l'ho ottenuto, se mai l'ho fatto. Colpa mia!
say to-json { foo => [ { a => 1 } ] };
dovrebbe produrre qualcosa di simile{"foo":[{"a":1}]}
, no{"foo":["a":1]}
. Quest'ultimo è un errore di battitura, giusto? In caso contrario, cosasay $*PERL.compiler.version;
dice?