แบบแผนการตั้งชื่อ JSON [ปิด]


379

มีมาตรฐานในการตั้งชื่อ JSON หรือไม่ ฉันเห็นตัวอย่างส่วนใหญ่ที่ใช้ตัวพิมพ์เล็กทั้งหมดคั่นด้วยเครื่องหมายขีดล่าง (lower_case) แต่คุณสามารถใช้ PascalCase หรือ camelCase ได้หรือไม่?


12
ฉันสงสัยว่าผู้นำในอุตสาหกรรมบางคนเลือก Twitter และ Facebook API ใช้ snake_case ในขณะที่ Microsoft และ Google ใช้ camelCase
Justin

2
@ จัสตินนั้นเป็นเพราะ Twitter ใช้ Ruby และ Facebook ใช้ PHP อยู่ Ruby และ PHP เข้าสู่ snake_case Microsoft และ Google ใช้ C / .NET และ Java ได้ดีตามลำดับ โอ้ใช่แล้ว. Net และ Java อาจเป็น camelCase ทุกอย่างเกี่ยวกับแบบแผนของภาษาการเขียนโปรแกรม
Abel Callejo

1
ไม่มีมาตรฐาน แต่ดูเหมือนว่าการประชุมจะใช้มาตรฐานของเทคโนโลยีของระบบการรับ
Martin of Hessle

1
ทั้งหมดถูกต้องไม่มีแบบแผนเข้มงวดสำหรับชื่อ / คีย์ใน JSON แม้ว่าฉันจะขอแนะนำให้หลีกเลี่ยงกรณีเคบับเพราะมันไม่สามารถเข้าถึงได้โดยใช้เครื่องหมาย dot (.) ในรูปแบบจาวาสคริปต์และจะต้องเข้าถึงได้โดยใช้สัญกรณ์อาร์เรย์ [] ซึ่งฉันคิดว่าน่าเบื่อ
saurabh

2
ปิดเป็นหลักตามความคิดเห็น? OP ได้ขอข้อเท็จจริงเกี่ยวกับความสามารถ / ข้อ จำกัด ของรูปแบบไม่ใช่เพื่อความคิดเห็นของทุกคน เขาพูดว่า "ได้ไหม" ไม่ใช่ "ควร" บางที OP ไม่ได้พูดอย่างชัดเจนเพียงพอสำหรับบุคคลทั้งห้า แต่คุณต้องมีความเข้าใจในการอ่านค่อนข้างต่ำเพื่อที่จะไม่เข้าใจสิ่งที่เขาถาม
dynamichael

คำตอบ:


251

ไม่มีมาตรฐานเดียว แต่ฉันได้เห็น 3 รูปแบบที่คุณพูดถึง ("Pascal / Microsoft", "Java" ( camelCase) และ "C" (ขีดล่าง, snake_case)) - รวมถึงอย่างน้อยหนึ่งอย่างkebab-caseเช่นlonger-name)

ดูเหมือนว่าส่วนใหญ่จะขึ้นอยู่กับผู้พัฒนาพื้นหลังของบริการที่มีปัญหา ผู้ที่มีพื้นหลัง c / c ++ (หรือภาษาที่ใช้การตั้งชื่อที่คล้ายกันซึ่งรวมถึงภาษาสคริปต์จำนวนมากทับทิม ฯลฯ ) มักจะเลือกตัวเลือกขีดล่าง; และพักผ่อนในทำนองเดียวกัน (Java vs .NET) ยกตัวอย่างเช่นห้องสมุด Jackson ที่ถูกกล่าวถึงให้ถือว่าการประชุมการตั้งชื่อ Java bean (camelCase )

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


4
การเกาะติดกับพื้นหลังของ devs นั้นมีความสำคัญ แต่ JSON นั้นใช้มาตรฐาน Javascript คำสั่งแรกของคุณไม่ถูกต้องนัก แต่แน่นอนว่าคุณต้องยึดถือแนวทางการตั้งชื่อทีมของคุณ
Anubian Noob

8
มันน่าสนใจที่จะเห็นสถิติบางอย่างเนื่องจากมีแรงเสียดทานอย่างต่อเนื่องระหว่างผู้ที่อ้างสิทธิ์การเชื่อมต่อระหว่าง JSON และ Javascript (นอกเหนือจากมรดกทางประวัติศาสตร์เท่านั้น) และผู้ที่คิดว่าปัจจุบันมีเล็กน้อยที่เชื่อมต่อ JSON กับ Javascript ฉันอยู่ในค่ายหลัง แต่ฉันสนใจที่จะรู้รูปแบบการใช้งานที่สัมพันธ์กัน
StaxMan

@StaxMan C # ใช้ PascalCase ในกรณีส่วนใหญ่ไม่ใช่ camelCase
ArtOfCode

@ArtOfCode ใช่ ประเด็นของคุณคืออะไร? (เช่นกรณีปาสกาลบางครั้งเรียกว่า "กรณีอูฐตอนบน")
StaxMan

@StaxMan คุณจะพิจารณาอัปเดตคำตอบของคุณเพื่อรวมการกล่าวถึง Googles Style Guide
garrettmac

402

ในเอกสารนี้คู่มือสไตล์ JSON ของ Google (คำแนะนำสำหรับการสร้าง JSON API ที่ Google)

แนะนำว่า:

  1. ชื่อคุณสมบัติต้องเป็นสตริง camelCased , ASCII

  2. อักขระตัวแรกจะต้องเป็นตัวอักษรเครื่องหมายขีดล่าง (_) หรือเครื่องหมายดอลลาร์ ($)

ตัวอย่าง:

{
  "thisPropertyIsAnIdentifier": "identifier value"
}

ทีมของฉันติดตามการประชุมนี้


8
เห็นได้ชัดว่า Google ได้เปลี่ยนแนวทางไม่มีอะไรที่จะหาเกี่ยวกับกรณีอูฐหรือเริ่มต้นด้วยตัวอักษร _ หรือ $ ในเอกสารอีกต่อไป ...
TheEye

32
@TheEye ยังอยู่ที่นั่นคุณเพียงแค่คลิกที่เลื่อนลง
gdw2

5
ตาดี @ gdw2 สำหรับคนอื่น ๆ Property Name Guidelines->Property Name Format->Choose meaningful property names.ในอนาคตก็ถ้าคุณคลิกที่ปุ่มลูกศรโดย
Panzercrisis

3
ใครสามารถอธิบายได้ว่าทำไมและเมื่อใดที่คุณจะใช้เครื่องหมายขีดล่างเพื่อนำหน้าชื่อคุณสมบัติ? การอ้างอิงจะมีประโยชน์ไม่ใช่แค่ความคิดเห็น
ฌอนโกลเวอร์

4
การอ้างถึง Google ไม่ใช่คำตอบที่เหมาะสม พวกเขาเพียงแค่สนับสนุนการประชุม / แนวทางบางอย่างและดูเหมือนว่าจะทำให้จาวารู้สึกว่าพวกเขาจะมุ่งเน้นจาวาสวย
โทมัสอังเดรวัง

186

หลักฐาน

นอกจากนี้ยังไม่มีการตั้งชื่อมาตรฐานของคีย์ใน JSON ตามส่วนวัตถุของข้อมูลจำเพาะ:

ไวยากรณ์ JSON ไม่ได้กำหนดข้อ จำกัด ใด ๆ กับสตริงที่ใช้เป็นชื่อ ...

ซึ่งหมายถึงcamelCaseหรือsnake_caseควรทำงานได้ดี

ปัจจัยขับเคลื่อน

การกำหนดระเบียบการตั้งชื่อ JSON ทำให้เกิดความสับสนมาก อย่างไรก็ตามสิ่งนี้สามารถหาได้ง่ายถ้าคุณแบ่งมันออกเป็นส่วนประกอบ

  1. ภาษาการเขียนโปรแกรมสำหรับสร้าง JSON

    • Python - snake_case
    • PHP - snake_case
    • Java - camelCase
    • JavaScript - camelCase
  2. JSON เองไม่มีการตั้งชื่อคีย์มาตรฐาน

  3. ภาษาการเขียนโปรแกรมสำหรับการวิเคราะห์ JSON

    • Python - snake_case
    • PHP - snake_case
    • Java - camelCase
    • JavaScript - camelCase

จับคู่คอมโพเนนต์ให้ตรงกัน

  1. Python » JSON » Python - snake_case - เป็นเอกฉันท์
  2. Python » JSON » PHP - snake_case - เป็นเอกฉันท์
  3. Python » JSON » Java - snake_case - โปรดดูปัญหา Javaด้านล่าง
  4. Python » JSON » JavaScript - snake_caseจะเข้าท่า ขันสกรูปลายด้านหน้าออก
  5. Python » JSON »คุณไม่รู้ - snake_caseจะเข้าท่า เกลียวตัวแยกวิเคราะห์
  6. PHP » JSON » Python - snake_case - เป็นเอกฉันท์
  7. PHP » JSON » PHP - snake_case - เป็นเอกฉันท์
  8. PHP » JSON » Java - snake_case - โปรดดูปัญหา Javaด้านล่าง
  9. PHP » JSON » JavaScript - snake_caseจะเข้าท่า ขันสกรูปลายด้านหน้าออก
  10. PHP » JSON »คุณไม่รู้ - snake_caseจะเข้าท่า เกลียวตัวแยกวิเคราะห์
  11. Java » JSON » Python - snake_case - โปรดดูปัญหา Javaด้านล่าง
  12. Java » JSON » PHP - snake_case - โปรดดูปัญหา Javaด้านล่าง
  13. Java » JSON » Java - camelCase - เป็นเอกฉันท์
  14. Java » JSON » JavaScript - camelCase - เป็นเอกฉันท์
  15. Java » JSON »คุณไม่รู้ - camelCaseจะเข้าท่า เกลียวตัวแยกวิเคราะห์
  16. JavaScript » JSON » Python - snake_caseจะเข้าท่า ขันสกรูปลายด้านหน้าออก
  17. JavaScript » JSON » PHP - snake_caseจะเข้าท่า ขันสกรูปลายด้านหน้าออก
  18. JavaScript » JSON » Java - camelCase - เป็นเอกฉันท์
  19. JavaScript » JSON » JavaScript - camelCase - ดั้งเดิม

ปัญหาเกี่ยวกับ Java

snake_caseยังคงเหมาะสมสำหรับผู้ที่มีรายการ Java เนื่องจากไลบรารี JSON ที่มีอยู่สำหรับ Java กำลังใช้วิธีการเข้าถึงคีย์แทนการใช้dot.syntaxมาตรฐานเท่านั้น ซึ่งหมายความว่ามันจะไม่เจ็บขนาดนั้นสำหรับ Java ในการเข้าถึงsnake_casedคีย์เมื่อเทียบกับภาษาการเขียนโปรแกรมอื่นซึ่งสามารถทำdot.syntaxได้

ตัวอย่างสำหรับ แพ็คเกจของ Javaorg.json

JsonObject.getString("snake_cased_key")

ตัวอย่างสำหรับ แพ็คเกจของ Javacom.google.gson

JsonElement.getAsString("snake_cased_key")

การใช้งานจริงบางอย่าง

สรุปผลการวิจัย

การเลือกรูปแบบการตั้งชื่อ JSON ที่เหมาะสมสำหรับการติดตั้ง JSON ของคุณนั้นขึ้นอยู่กับสแต็คเทคโนโลยีของคุณ มีหลายกรณีที่สามารถใช้snake_case , camelCase ได้หรือแบบแผนการตั้งชื่ออื่น ๆ

อีกสิ่งที่ควรพิจารณาคือน้ำหนักที่จะวางบน JSON-generator เทียบกับ JSON-parser และ / หรือ front-end JavaScript โดยทั่วไปแล้วควรวางน้ำหนักเพิ่มเติมในส่วนของตัวสร้าง JSON แทนที่จะเป็นตัวแยกวิเคราะห์ JSON นี่เป็นเพราะตรรกะทางธุรกิจมักจะอยู่ในด้านตัวสร้าง JSON

นอกจากนี้หากไม่รู้จักด้าน JSON-parser คุณสามารถประกาศสิ่งที่ใช้ได้สำหรับคุณ


2
"Person":ไม่ใช่ camelCase :)
stoft

1
@stoft นั่นอาจเป็นเพราะพวกเขาทำตามแบบแผนของ schema.org ด้วย การเริ่มคีย์ด้วยอักษรตัวใหญ่หมายความว่าเป็นหน่วยคำศัพท์ การเริ่มคีย์ด้วยตัวอักษรตัวเล็กหมายความว่าเป็นคุณสมบัติคำศัพท์
Abel Callejo

2
ฉันไม่เห็นด้วยกับความคิดเหล่านี้เพียงเพราะ Python แบ็คเอนด์> Java frontend ควรเป็น camelCase แต่จากนั้นคุณเพิ่ม Python frontend และคุณมีแบ็กเอนด์แบ็กเอนด์และส่วนหน้าเดียว มันควรจะเป็นวิธีที่แบ็กเอนด์มี "มาตรฐาน" โปรแกรมแยกวิเคราะห์ส่วนหน้าช่วยให้ปรับตัวได้ง่ายขึ้น
Bojan Kogoj

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

1
@ RobbieWareham ฉันเห็นด้วยอย่างนั้น สิ่งที่นี่คือ "ตามมาตรฐาน" ไม่มีการตั้งชื่อการประชุมอย่างเป็นทางการ ดังนั้นด้วยสิ่งนั้นบางทีเราควรเลือก "by de พฤตินัย" ซึ่งก็คือดูที่กองเทคโนโลยี ฉันคิดว่าการมองเข้าไปในกองเทคโนโลยีเป็นวิธีที่ดีที่สุด ลองดูที่ Facebook พวกเขาเคยให้เกียรติ JavaScript และใช้ snakeCase ในอดีตหรือไม่? Nah! พวกเขาเลือกที่จะติดกับ snake_case ของ PHP
Abel Callejo

18

โดยเฉพาะอย่างยิ่งสำหรับฉันใน NodeJS ถ้าฉันทำงานกับฐานข้อมูลและชื่อเขตข้อมูลของฉันแยกออกจากกันฉันก็ใช้มันในคีย์ struct

นี่เป็นเพราะเขตข้อมูล db มีคำย่อ / ตัวย่อจำนวนมากดังนั้นบางอย่างเช่นappSNSInterfaceRRTestดูยุ่งเล็กน้อย แต่app_sns_interface_rr_testเป็น nicer

ในตัวแปร Javascript ทั้งหมด camelCase และชื่อคลาส (ตัวสร้าง) เป็น ProperCase ดังนั้นคุณจะเห็นบางอย่างเช่น

var devTask = {
        task_id: 120,
        store_id: 2118,
        task_name: 'generalLedger'
    };

หรือ

generalLedgerTask = new GeneralLedgerTask( devTask );

และแน่นอนในคีย์ / สตริง JSON นั้นถูกห่อด้วยอัญประกาศคู่ แต่จากนั้นคุณเพียงใช้ JSON.stringify และส่งผ่านในวัตถุ JS ดังนั้นไม่จำเป็นต้องกังวลเกี่ยวกับเรื่องนั้น

ฉันดิ้นรนกับเรื่องนี้เล็กน้อยจนกว่าฉันจะพบสื่อความสุขนี้ระหว่างการประชุมการตั้งชื่อ JSON และ JS


1
กันที่นี่ การรับ JSON ด้วย snake_case ที่ไคลเอนต์ Android ดูน่าอึดอัดใจ !! นอกจากนี้ฐานข้อมูลจะไม่แยกความแตกต่างของชื่อคอลัมน์ดังนั้น snake_case จึงน่าจะดีที่สุดสำหรับฐานข้อมูล
mythicalcoder

@mythicalcoder JSON ใน Java ไม่ได้อยู่ในแกนหลักของมัน Java เพียงใช้แพคเกจภายนอกสำหรับการแยก Java เช่น,org.json gsonการได้รับข้อมูล snake_case ไม่ได้ทำให้เกิดความเสียหายเช่นนั้น ...JSONObject.get('snake_case_key_here')
Abel Callejo

9

ดูเหมือนว่ามีความหลากหลายมากพอที่ผู้คนจะหลีกเลี่ยงการอนุญาตให้มีการแปลงจากอนุสัญญาทั้งหมดไปสู่ผู้อื่น: http://www.cowtowncoder.com/blog/archives/cat_json.html

โดยเฉพาะอย่างยิ่งที่กล่าวถึงแจ็คสัน JSON parser bean_namingชอบ


5
ไมเนอร์แก้ไข: ค่าเริ่มต้นของแจ็คสันชวาประชุมถั่วตั้งชื่อซึ่งเป็น (ลด) beanNamingอูฐกรณีเช่น
StaxMan

0

ฉันคิดว่ามันไม่มีแผนการตั้งชื่ออย่างเป็นทางการสำหรับ JSON แต่คุณสามารถติดตามผู้นำในอุตสาหกรรมเพื่อดูว่ามันทำงานอย่างไร

Google ซึ่งเป็นหนึ่งใน บริษัท ด้านไอทีที่ใหญ่ที่สุดในโลกมีแนวทางแบบ JSON: https://google.github.io/styleguide/jsoncstyleguide.xml

การใช้ประโยชน์คุณสามารถค้นหาคู่มือสไตล์อื่น ๆ ซึ่ง Google กำหนดไว้ที่นี่: https://github.com/google/styleguide


0

ตามที่คนอื่น ๆ ระบุว่าไม่มีมาตรฐานดังนั้นคุณควรเลือกด้วยตัวเอง ต่อไปนี้เป็นสิ่งที่ควรพิจารณาเมื่อทำเช่นนี้:

  1. หากคุณใช้ JavaScript เพื่อใช้ JSON ดังนั้นการใช้หลักการตั้งชื่อแบบเดียวกันสำหรับคุณสมบัติในทั้งสองอย่างนั้นจะให้ความมั่นคงทางสายตาและโอกาสในการใช้โค้ดที่สะอาดยิ่งขึ้น

  2. เหตุผลเล็กน้อยที่ควรหลีกเลี่ยงกรณีเคบับคือยัติภังค์อาจปะทะกับ-อักขระที่ปรากฏในค่า

    {
      "bank-balance": -10
    }

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