Podczas próby utworzenia komunikatu JSON dla interfejsu API miałem trudności z zrobieniem czegoś, co moim zdaniem byłoby proste. Musiałem utworzyć wiadomość podobną do następującej:
{ "list": [ { "foo": 1, "bar": 2 } ] }
Jednak moja pierwsza próba nie zadziałała:
say to-json { foo => [ { a => 1, b => 2 } ] };
# {"foo":[{"a":1},{"b":2}]}
Próba dalszego uproszczenia sprawiła mi więcej zamieszania:
say { foo => [ { a => 1 } ] };
# {foo => [a => 1]}
# Note that this is not JSON, but I expected to see curly braces
Potem spróbowałem użyć zmiennych tymczasowych i to zadziałało:
my @list = { a => 1 };
say to-json { foo => @list };
# {"foo":[{"a":1}]}
my %hash = ( a => 1 );
say to-json { foo => [ %hash ] };
# {"foo":[{"a":1}]}
Co tu się dzieje?
I czy jest sposób, w jaki mogę osiągnąć pożądaną wydajność bez dodatkowej zmiennej tymczasowej?
say to-json { foo => [ a => 1 ] }
wyjściowe, {"foo":[{"a":1}]}
więc kto wie, co napisałem, kiedy to dostałem, jeśli kiedykolwiek to zrobiłem. Mój błąd!
say to-json { foo => [ { a => 1 } ] };
powinien wypisać coś takiego{"foo":[{"a":1}]}
, a nie{"foo":["a":1]}
. Ten ostatni to literówka, prawda? Jeśli nie, cosay $*PERL.compiler.version;
powiesz?