นี่คือหนึ่งในความแตกต่างที่ละเอียดอ่อนในคอลเล็กชันการทำแผนที่ต่างๆที่สามารถกัดคุณได้ JSON ถือว่าคีย์เป็นสตริง Python รองรับคีย์เฉพาะที่แตกต่างกันในประเภทเท่านั้น
ใน Python (และเห็นได้ชัดใน Lua) คีย์ในการทำแผนที่ (พจนานุกรมหรือตารางตามลำดับ) คือการอ้างอิงวัตถุ ใน Python ต้องเป็นประเภทที่ไม่เปลี่ยนรูปหรือต้องเป็นวัตถุที่ใช้ a__hash__
วิธีการ (เอกสาร Lua แนะนำให้ใช้ ID ของอ็อบเจ็กต์เป็นแฮช / คีย์โดยอัตโนมัติแม้กระทั่งสำหรับอ็อบเจ็กต์ที่เปลี่ยนแปลงได้และอาศัยสตริงภายในเพื่อให้แน่ใจว่าสตริงที่เทียบเท่าจะแมปกับอ็อบเจ็กต์เดียวกัน)
ใน Perl, Javascript, awk และภาษาอื่น ๆ อีกมากมายคีย์สำหรับแฮชอาร์เรย์ที่เชื่อมโยงหรืออะไรก็ตามที่เรียกสำหรับภาษานั้น ๆ คือสตริง (หรือ "สเกลาร์" ใน Perl) ใน perl $foo{1}, $foo{1.0}, and $foo{"1"}
ล้วนเป็นการอ้างอิงถึงการแม็ปเดียวกันใน%foo
--- คีย์ถูกประเมินเป็นสเกลาร์!
JSON เริ่มต้นด้วยเทคโนโลยีอนุกรม Javascript (JSON ย่อมาจากJ ava S cript O bject N ) โดยธรรมชาติแล้วจะใช้ความหมายสำหรับสัญกรณ์การแมปซึ่งสอดคล้องกับความหมายของการทำแผนที่
หากปลายทั้งสองด้านของการทำให้เป็นอนุกรมของคุณเป็น Python คุณควรใช้ผักดองดีกว่า หากคุณต้องการแปลงกลับจาก JSON เป็นวัตถุ Python ดั้งเดิมฉันเดาว่าคุณมีทางเลือกสองทาง ขั้นแรกคุณสามารถลอง ( try: ... except: ...
) เพื่อแปลงคีย์ใด ๆ เป็นตัวเลขในกรณีที่การค้นหาพจนานุกรมล้มเหลว หรือหากคุณเพิ่มโค้ดที่ปลายอีกด้านหนึ่ง (ตัวต่ออนุกรมหรือตัวสร้างของข้อมูล JSON นี้) คุณสามารถให้มันดำเนินการอนุกรม JSON กับค่าคีย์แต่ละค่าโดยระบุเป็นรายการคีย์ (จากนั้นโค้ด Python ของคุณจะวนซ้ำในรายการคีย์ก่อนโดยสร้างอินสแตนซ์ / deserializing ให้เป็นอ็อบเจกต์ Python ดั้งเดิม ... จากนั้นใช้ค่าเหล่านี้เพื่อเข้าถึงค่าจากการแมป)