En essayant de créer un message JSON pour une API, j'ai eu du mal à faire quelque chose que je pensais être simple. J'avais besoin de créer un message comme celui-ci:
{ "list": [ { "foo": 1, "bar": 2 } ] }
Cependant, ma première tentative n'a pas fonctionné:
say to-json { foo => [ { a => 1, b => 2 } ] };
# {"foo":[{"a":1},{"b":2}]}
Essayer de simplifier les choses m'a encore plus dérouté:
say { foo => [ { a => 1 } ] };
# {foo => [a => 1]}
# Note that this is not JSON, but I expected to see curly braces
Ensuite, j'ai essayé d'utiliser des variables temporaires, et cela a fonctionné:
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 se passe t-il ici?
Et est-il possible d'obtenir la sortie souhaitée sans variable temporaire supplémentaire?
say to-json { foo => [ a => 1 ] }
sorties {"foo":[{"a":1}]}
donc qui sait ce que j'ai tapé quand j'ai eu ça, si je l'ai jamais fait. Ma faute!
say to-json { foo => [ { a => 1 } ] };
devrait produire quelque chose comme{"foo":[{"a":1}]}
, non{"foo":["a":1]}
. Ce dernier est une faute de frappe, non? Sinon, quesay $*PERL.compiler.version;
dit-on?