Trong khi cố gắng tạo một thông báo JSON cho API, tôi thấy mình phải vật lộn để làm điều gì đó mà tôi nghĩ sẽ đơn giản. Tôi cần tạo một tin nhắn như sau:
{ "list": [ { "foo": 1, "bar": 2 } ] }
Tuy nhiên, nỗ lực đầu tiên của tôi đã không hoạt động:
say to-json { foo => [ { a => 1, b => 2 } ] };
# {"foo":[{"a":1},{"b":2}]}
Cố gắng đơn giản hóa mọi thứ càng làm tôi bối rối hơn:
say { foo => [ { a => 1 } ] };
# {foo => [a => 1]}
# Note that this is not JSON, but I expected to see curly braces
Sau đó, tôi đã cố gắng sử dụng một số biến tạm thời và điều đó đã làm việc:
my @list = { a => 1 };
say to-json { foo => @list };
# {"foo":[{"a":1}]}
my %hash = ( a => 1 );
say to-json { foo => [ %hash ] };
# {"foo":[{"a":1}]}
Những gì đang xảy ra ở đây?
Và có cách nào để tôi có thể đạt được đầu ra mong muốn của mình mà không cần thêm một biến tạm thời không?
say to-json { foo => [ a => 1 ] }
kết quả đầu ra {"foo":[{"a":1}]}
để ai biết tôi đã gõ gì khi tôi nhận được điều đó, nếu tôi đã từng làm. Lỗi của tôi!
say to-json { foo => [ { a => 1 } ] };
nên xuất cái gì đó như thế{"foo":[{"a":1}]}
, không{"foo":["a":1]}
. Cái sau là một lỗi đánh máy, phải không? Nếu không,say $*PERL.compiler.version;
nói gì?