การใช้ยัติภังค์ในคีย์ JSON เป็นเรื่องที่ผิดหรือไม่?


12

ฉันเห็นคำถามมากมายเกี่ยวกับการเข้าถึงคีย์ JSON ที่ใช้ยัติภังค์ (กรณีเคบับ) แต่ตอนนี้ฉันพบว่าตัวเองสงสัยว่าฉันควรติดกับ camelCase หรือ snake_case ในกุญแจของฉัน ฉันรู้ว่ายัติภังค์สามารถสร้างการแมปที่ซับซ้อนได้เมื่อทำการย้ายระหว่างภาษา ฉันเคยเห็นไลบรารี่ของ JSON ที่ทำการ deserialize แปลงคีย์เหล่านั้นเป็นรูปแบบ camelCase

ตัวอย่าง:

var something = {
  "some-value": 'thing'
}

Vs

var something = {
  "someValue": 'thing',
  "some_other_value": 'thing_two'
}

4
REST ไม่มีอะไรจะพูดเกี่ยวกับรูปแบบของเพย์โหลด
Eric Stein

2
ทำไมคุณถึงใช้ kebab-case ใน JSON? ผู้คนมักจะใช้ camelCase สำหรับ JSON เพราะมันเป็นแนวปฏิบัติที่ดีเสมอในการปฏิบัติตามข้อกำหนดการตั้งชื่อของสภาพแวดล้อมการเขียนโปรแกรมและเป็นแนวปฏิบัติมาตรฐานในการใช้ camelCase สำหรับตัวแปรใน JavaScript แม้ว่าฉันจะเป็นไปตามสมมติฐานที่ว่าคุณกำลังใช้ JSON เพื่อสื่อสารกับ JavaScript
Alternatex

1
ฉันเห็นคำถามถูกติดแท็กด้วย javascript แต่คำถามนั้นดูเหมือนว่าจะเกี่ยวกับ API ระหว่างภาษา / ไลบรารีต่าง ๆ หากคุณกังวลเกี่ยวกับจาวาสคริปต์โปรดทราบว่าเครื่องหมายดอทไม่สามารถใช้กับเครื่องหมายยัติภังค์
Izkata

5
มันไม่ได้เป็นแนวปฏิบัติที่ไม่ดีจริงๆเนื่องจาก JSON เป็นภาษาที่ไม่ขึ้นต่อกันดังนั้นจึงไม่ควรถูก จำกัด โดยไวยากรณ์ของภาษาใด ๆ ที่กล่าวว่ามันสมเหตุสมผลที่จะใช้เฉพาะตัวอักษรและตัวเลขเนื่องจากสามารถแมปกับตัวระบุในภาษากระแสหลักทั้งหมดได้โดยตรงดังนั้นสิ่งนี้จะนำไปสู่ปัญหาการทำแผนที่จำนวนน้อยที่สุด
JacquesB

1
@Alternatex: +1 สำหรับ "kebab-case" :-)
gnasher729

คำตอบ:


13

คุณสามารถใช้ทุกอย่างเป็นคีย์ JSON ได้ตราบใดที่เป็น UTF-8 ที่ถูกต้องไม่มีรหัสจุดศูนย์และมันจะมีประโยชน์ถ้าคุณสามารถแสดงคีย์เป็นสตริงในภาษาการเขียนโปรแกรมที่คุณเลือก ฉันอาจไม่แนะนำให้ใช้ Unicode ที่เป็นตัวแทนของสตริงเดียวกัน (ตัวอย่างเช่น "Ä" ที่เขียนเป็นจุดรหัสหนึ่งหรือสองจุด)

อ่านความคิดเห็น: ดูเหมือนว่าบางคนพยายามที่จะสร้างคลาสที่มีตัวแปรอินสแตนซ์ที่ตรงกับคีย์ในพจนานุกรม JSON หลักสูตรใดไม่ทำงานหากคีย์ของคุณคือ "ค่าบางอย่าง" เว้นแต่ว่าคุณเขียนภาษาโคบอล ฉันคิดว่านี่ผิดพลาด ฉันมีคลาสรุ่นที่ออกแบบตามที่ฉันต้องการ JSON ใช้เพื่อเติมคลาสโมเดลเท่านั้น ฉันจะใช้ทุกสิ่งที่พวกเซิร์ฟเวอร์ตัดสินใจใช้สำหรับคีย์และใส่ลงในวัตถุโมเดลของฉัน


1
เร่งด่วนคุณขอคำถามว่าโปรแกรมการบริโภคของคุณเข้าถึงคีย์ json อย่างไร โดยทั่วไปจะทำโดยการแยก json เป็นวัตถุ การใช้ไฮเปอร์เทนเนอร์หรือตัวละครอื่น ๆ ที่ป้องกันไม่ให้สิ่งนี้ทำให้ชีวิตของคุณยากขึ้นสำหรับผู้บริโภค
Ewan

และนี่เป็นสิ่งที่ถูกต้อง: {"❓": "✅"}
Vinicius Brasil

1
ยัติภังค์จะป้องกันอะไรได้อย่างไร ฉันได้รับพจนานุกรมและสามารถใช้ "บางคีย์" เป็นคีย์ฉันยังสามารถใช้ "❓" เป็นคีย์ได้
gnasher729

9

มีระบบการทำให้เป็นอันดับ JSON มากมายที่สามารถจัดการการแมประหว่างชื่อฟิลด์ที่ไม่เหมาะสำหรับการใช้ในภาษาที่รวมเข้าด้วยกันได้ ในกรณีส่วนใหญ่จะไม่ใช้งานยากและต้องใช้ความพยายามเพิ่มเล็กน้อย ในโลกอุดมคติคุณจะไม่ต้องทำ แต่ถ้า API ของคุณใช้เครื่องหมายขีดกลางอยู่แล้วการเปลี่ยนแปลงมันจะเป็นการรักษาที่แย่กว่าโรค นอกจากนี้โปรดทราบว่าการใช้เครื่องหมายขีดคั่นเป็นลักษณะที่พบบ่อยที่สุดในบางภาษาโดยเฉพาะอย่างยิ่งภาษาที่ใช้ LISP ดังนั้นอาจมีผู้ใช้ API ของคุณที่มีความเงียบน้อยที่ยินดีเห็นขีดกลางมากกว่ารูปแบบอื่น


ฉันจะโหวตให้โดยเร็วที่สุดเท่านี้ฉันพบข้อมูลเชิงลึกในนั้นแล้วขอบคุณ
Matt Oaxaca

1

หลังจากใช้เวลาในอุตสาหกรรมและทำงานระบบน้อย ฉันไม่คิดว่าจะมีวิธีปฏิบัติที่ดีที่สุดหรือตัวเครื่องที่เหมาะสมสำหรับปุ่ม JSON สิ่งสำคัญที่สุดของการจัดรูปแบบใด ๆ (เคส / โค้ดสไตล์ / ฯลฯ ) คือความสอดคล้องและการยอมรับของทีม

หากฐานรหัสมีการแยกส่วนและไม่สอดคล้องกันให้พบกันเป็นทีมและเห็นด้วยกับรูปแบบที่สอดคล้องกันจากนั้นตำรวจกำหนดรูปแบบโดยรวม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.