ในขณะที่พยายามสร้างข้อความ 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;
พูดอะไร