Намагаючись створити повідомлення JSON для API, я опинився, що намагаюся зробити щось, на що я вважав, що це буде просто. Мені потрібно було створити повідомлення на зразок наступного:
{ "list": [ { "foo": 1, "bar": 2 } ] }
Однак моя перша спроба не вийшла:
say to-json { foo => [ { a => 1, b => 2 } ] };
# {"foo":[{"a":1},{"b":2}]}
Намагання спростити речі ще більше мене збентежило:
say { foo => [ { a => 1 } ] };
# {foo => [a => 1]}
# Note that this is not JSON, but I expected to see curly braces
Потім я спробував використати деякі тимчасові змінні, і це спрацювало:
my @list = { a => 1 };
say to-json { foo => @list };
# {"foo":[{"a":1}]}
my %hash = ( a => 1 );
say to-json { foo => [ %hash ] };
# {"foo":[{"a":1}]}
Що тут відбувається?
І чи є спосіб я досягти бажаного результату без додаткової тимчасової змінної?
say to-json { foo => [ a => 1 ] }
виходи, {"foo":[{"a":1}]}
тож хто знає, що я набрав, коли отримав це, якщо коли-небудь це зробив Моє ліжко!
say to-json { foo => [ { a => 1 } ] };
має вивести щось подібне{"foo":[{"a":1}]}
, ні{"foo":["a":1]}
. Останнє - друкарня, правда? Якщо ні, то щоsay $*PERL.compiler.version;
говорить?