Beim Versuch, eine JSON-Nachricht für eine API zu erstellen, hatte ich Schwierigkeiten, etwas zu tun, von dem ich dachte, dass es einfach wäre. Ich musste eine Nachricht wie die folgende erstellen:
{ "list": [ { "foo": 1, "bar": 2 } ] }
Mein erster Versuch hat jedoch nicht funktioniert:
say to-json { foo => [ { a => 1, b => 2 } ] };
# {"foo":[{"a":1},{"b":2}]}
Der Versuch, die Dinge weiter zu vereinfachen, verwirrte mich mehr:
say { foo => [ { a => 1 } ] };
# {foo => [a => 1]}
# Note that this is not JSON, but I expected to see curly braces
Dann habe ich versucht, einige temporäre Variablen zu verwenden, und das hat funktioniert:
my @list = { a => 1 };
say to-json { foo => @list };
# {"foo":[{"a":1}]}
my %hash = ( a => 1 );
say to-json { foo => [ %hash ] };
# {"foo":[{"a":1}]}
Was ist denn hier los?
Und gibt es eine Möglichkeit, meine gewünschte Ausgabe ohne eine zusätzliche temporäre Variable zu erzielen?
say to-json { foo => [ a => 1 ] }
Ausgaben, {"foo":[{"a":1}]}
also wer weiß, was ich geschrieben habe, als ich das bekam, wenn ich es jemals getan habe. Mein Fehler!
say to-json { foo => [ { a => 1 } ] };
sollte so etwas ausgeben{"foo":[{"a":1}]}
, nicht{"foo":["a":1]}
. Letzteres ist ein Tippfehler, oder? Wenn nicht, wassay $*PERL.compiler.version;
sagt das aus?