Công ước đặt tên JSON [đã đóng]


379

Có một tiêu chuẩn về đặt tên JSON không? Tôi thấy hầu hết các ví dụ sử dụng tất cả các chữ thường được phân tách bằng dấu gạch dưới (low_case). Nhưng, bạn có thể sử dụng PascalCase hoặc camelCase không?


12
Tôi tò mò không biết những gì các nhà lãnh đạo ngành công nghiệp đã chọn. API của Twitter và Facebook sử dụng Snake_case trong khi Microsoft và Google sử dụng camelCase.
Justin

2
@Justin đó là vì Twitter đang sử dụng Ruby và Facebook đang sử dụng PHP. Ruby và PHP vào trong sn_case. Microsoft và Google tương ứng sử dụng C / .NET và Java. Ồ đúng vậy .Net và Java có thể vào camelCase. Đó là tất cả về quy ước của các ngôn ngữ lập trình
Abel Callejo

1
Không có tiêu chuẩn, nhưng quy ước dường như là sử dụng tiêu chuẩn công nghệ của hệ thống tiếp nhận.
Martin của Hessle

1
Tất cả đều đúng, không có quy ước nghiêm ngặt nào về tên / khóa trong JSON. Mặc dù vậy, tôi đặc biệt khuyên bạn nên tránh trường hợp kebab vì nó không thể được truy cập bằng ký hiệu dấu chấm (.) Trong javascript và phải được truy cập bằng cách sử dụng ký hiệu mảng [] mà tôi nghĩ là tẻ nhạt.
saurabh

2
Đóng như chủ yếu dựa trên ý kiến? OP đã yêu cầu sự thật về khả năng / giới hạn của định dạng, không phải ý kiến ​​của bất kỳ ai. Anh ấy nói "bạn có thể" chứ không phải "bạn nên". Có lẽ OP đã không nói nó đủ rõ ràng cho năm cá nhân đó, nhưng bạn phải có khả năng đọc hiểu khá kém để không hiểu những gì anh ta hỏi.
điện

Câu trả lời:


251

Không có tiêu chuẩn SINGLE, nhưng tôi đã thấy 3 kiểu bạn đề cập ("Pascal / Microsoft", "Java" ( camelCase) và "C" (gạch dưới, snake_case)) - cũng như ít nhất một kiểu nữa, kebab-casenhưlonger-name ).

Nó chủ yếu dường như phụ thuộc vào những nhà phát triển nền tảng của dịch vụ được đề cập; những người có nền c / c ++ (hoặc ngôn ngữ áp dụng cách đặt tên tương tự, bao gồm nhiều ngôn ngữ script, ruby, v.v.) thường chọn biến thể gạch dưới; và phần còn lại tương tự (Java vs .NET). Thư viện Jackson đã được đề cập, ví dụ, giả sử quy ước đặt tên đậu Java (camelCase )

CẬP NHẬT: định nghĩa của tôi về "tiêu chuẩn" là một quy ước SINGLE. Vì vậy, trong khi người ta có thể tuyên bố "có, có nhiều tiêu chuẩn", với tôi có nhiều tiêu chuẩn, không có tiêu chuẩn Naming Conventionsnào là "Tiêu chuẩn". Một trong số chúng có thể được coi là tiêu chuẩn cho nền tảng cụ thể, nhưng cho rằng JSON được sử dụng cho khả năng tương tác giữa các nền tảng có thể có hoặc không có ý nghĩa nhiều.


4
Bám sát nền của các nhà phát triển là quan trọng, nhưng JSON bám sát với tiêu chuẩn Javascript. Tuyên bố đầu tiên của bạn không hoàn toàn chính xác. Nhưng chắc chắn gắn bó với các quy ước đặt tên của nhóm của bạn.
Anubian Noob

8
Sẽ rất thú vị khi xem một số thống kê, vì có sự xích mích liên tục giữa những người yêu cầu kết nối giữa JSON và Javascript (ngoài di sản lịch sử) và những người cho rằng hiện tại có rất ít kết nối JSON với Javascript. Tôi thuộc về trại sau. Nhưng tôi sẽ quan tâm đến việc biết mô hình sử dụng tương đối.
Staxman

@StaxMan C # sử dụng PascalCase trong phần lớn các trường hợp, không phải camelCase.
ArtOfCode

@ArtOfCode có. Quan điểm của bạn là gì? (cũng vậy, trường hợp pascal đôi khi được gọi là "trường hợp lạc đà trên")
StaxMan

@StaxMan bạn có muốn xem xét cập nhật câu trả lời của mình để bao gồm đề cập đến Hướng dẫn về Phong cách của Googles
garrettmac

402

Trong tài liệu này, Google JSON Style Guide (các đề xuất xây dựng API JSON tại Google),

Nó khuyến nghị rằng:

  1. Tên thuộc tính phải là camelCasing , chuỗi ASCII.

  2. Ký tự đầu tiên phải là một chữ cái, dấu gạch dưới (_) hoặc ký hiệu đô la ($).

Thí dụ:

{
  "thisPropertyIsAnIdentifier": "identifier value"
}

Nhóm của tôi theo quy ước này.


8
Rõ ràng Google đã thay đổi các nguyên tắc, không có gì để tìm về trường hợp lạc đà hoặc bắt đầu bằng chữ cái, _ hoặc $ trong tài liệu nữa ...
TheEye

32
@TheEye Nó vẫn ở đó, bạn chỉ cần nhấp vào thả xuống.
gdw2

5
Mắt tốt, @ gdw2. Đối với những người khác trong tương lai, đó là nếu bạn nhấp vào nút mũi tên bằng cách Property Name Guidelines->Property Name Format->Choose meaningful property names..
Panzercrisis

3
Ai đó có thể giải thích tại sao và khi nào bạn sẽ sử dụng dấu gạch dưới để đặt tiền tố tên thuộc tính không? Một tài liệu tham khảo sẽ hữu ích, không chỉ là một ý kiến.
Sean Glover

4
trích dẫn Google không phải là một câu trả lời propper. họ chỉ hỗ trợ một quy ước / hướng dẫn nhất định và có vẻ như java có ý nghĩa vì chúng được định hướng java đẹp.
Thomas Andreè Wang

186

Tiền đề

Không có cách đặt tên chuẩn trong JSON . Theo phần Đối tượng của thông số kỹ thuật:

Cú pháp JSON không áp đặt bất kỳ hạn chế nào đối với các chuỗi được sử dụng làm tên, ...

Có nghĩa là camelCase hoặc Snake_case sẽ hoạt động tốt.

Yếu tố lái xe

Áp đặt một quy ước đặt tên JSON là rất khó hiểu. Tuy nhiên, điều này có thể dễ dàng được tìm ra nếu bạn chia nó thành các thành phần.

  1. Ngôn ngữ lập trình để tạo JSON

    • Con trăn - con rắn
    • PHP - con rắn
    • Java - camelCase
    • JavaScript - camelCase
  2. Bản thân JSON không có cách đặt tên chuẩn

  3. Ngôn ngữ lập trình để phân tích cú pháp JSON

    • Con trăn - con rắn
    • PHP - con rắn
    • Java - camelCase
    • JavaScript - camelCase

Trộn các thành phần

  1. Python »JSON» Python - Snake_case - nhất trí
  2. Python »JSON» PHP - sn_case - nhất trí
  3. Python »JSON» Java - Snake_case - vui lòng xem vấn đề Java bên dưới
  4. Python »JSON» JavaScript - Snake_case sẽ có ý nghĩa; vặn vít mọi thứ
  5. Python »JSON» bạn không biết - Snake_case sẽ có ý nghĩa; vít bộ phân tích cú pháp
  6. PHP »JSON» Python - Snake_case - nhất trí
  7. PHP »JSON» PHP - sn_case - nhất trí
  8. PHP »JSON» Java - Snake_case - vui lòng xem vấn đề Java bên dưới
  9. PHP »JSON» JavaScript - Snake_case sẽ có ý nghĩa; vặn vít mọi thứ
  10. PHP »JSON» bạn không biết - sn_case sẽ có ý nghĩa; vít bộ phân tích cú pháp
  11. Java »JSON» Python - sn_case - vui lòng xem vấn đề Java bên dưới
  12. Java »JSON» PHP - sn_case - vui lòng xem vấn đề Java bên dưới
  13. Java »JSON» Java - camelCase - nhất trí
  14. Java »JSON» JavaScript - camelCase - nhất trí
  15. Java »JSON» bạn không biết - camelCase sẽ có ý nghĩa; vít bộ phân tích cú pháp
  16. JavaScript »JSON» Python - Snake_case sẽ có ý nghĩa; vặn vít mọi thứ
  17. JavaScript »JSON» PHP - Snake_case sẽ có ý nghĩa; vặn vít mọi thứ
  18. JavaScript »JSON» Java - camelCase - nhất trí
  19. JavaScript »JSON» JavaScript - camelCase - Bản gốc

Vấn đề Java

Snake_case vẫn sẽ có ý nghĩa đối với những người có các mục nhập Java vì các thư viện JSON hiện có cho Java chỉ sử dụng các phương thức để truy cập các khóa thay vì sử dụng dot.syntax tiêu chuẩn . Điều này có nghĩa là Java sẽ không làm tổn hại nhiều đến việc Java truy cập các khóa con rắn so với ngôn ngữ lập trình khác có thể thực hiện dot.syntax .

Ví dụ cho gói Javaorg.json

JsonObject.getString("snake_cased_key")

Ví dụ cho gói Javacom.google.gson

JsonElement.getAsString("snake_cased_key")

Một số triển khai thực tế

Kết luận

Việc chọn quy ước đặt tên JSON phù hợp cho việc triển khai JSON của bạn phụ thuộc vào ngăn xếp công nghệ của bạn. Có những trường hợp người ta có thể sử dụng Snake_case , camelCase hoặc bất kỳ quy ước đặt tên nào khác.

Một điều khác cần xem xét là trọng số được đặt trên trình tạo JSON so với trình phân tích cú pháp JSON và / hoặc JavaScript giao diện người dùng. Nói chung, nên đặt nhiều trọng lượng hơn về phía trình tạo JSON thay vì phía trình phân tích cú pháp JSON. Điều này là do logic nghiệp vụ thường nằm ở phía trình tạo JSON.

Ngoài ra, nếu không biết phía trình phân tích cú pháp JSON thì bạn có thể khai báo những gì có thể làm việc cho bạn.


2
"Person":không phải là camelCase :)
stoft

1
@stoft đó có lẽ là vì họ cũng tuân theo quy ước của lược đồ.org. Bắt đầu khóa bằng chữ in hoa có nghĩa là nó là một thực thể từ vựng. Bắt đầu khóa bằng chữ thường có nghĩa là một thuộc tính từ vựng.
Abel Callejo 17/03/2016

2
Tôi không đồng ý với những ý tưởng này, đơn giản vì phụ trợ Python> giao diện Java phải là camelCase, nhưng sau đó bạn thêm giao diện Python và bạn đã thỏa hiệp phụ trợ và một giao diện. Nó phải là cách phụ trợ có "tiêu chuẩn". Các trình phân tích cú pháp Frontend có thể dễ dàng thích nghi hơn
Bojan Kogoj

2
Mối quan tâm của tôi ở đây là có liên quan đến ngăn xếp "công nghệ của bạn". Một nhà sản xuất JSON đặc biệt là nếu được phục vụ bởi một máy chủ HTTP sẽ không có kiến ​​thức về ai hoặc những gì đang tiêu thụ nó, hoặc vì lý do gì. Nếu JSON được sử dụng như một phương thức giao tiếp giữa nhiều nhà sản xuất và người tiêu dùng, thì công nghệ của nhà sản xuất không nên được xem xét.
Robbie Wareham

1
@RobbieWareham Tôi bằng cách nào đó đồng ý về điều đó. Vấn đề ở đây là "theo tiêu chuẩn" không có quy ước đặt tên chính thức. Vì vậy, với điều đó, có lẽ người ta nên chọn "theo thực tế" để xem xét công nghệ. Tôi nghĩ rằng nhìn vào ngăn xếp công nghệ là cách tốt nhất để đi. Hãy xem facebook, họ có lịch sử tôn vinh JavaScript và sử dụng SnakeCase không? Không! Họ đã chọn gắn bó với con rắn của PHP.
Abel Callejo

18

Đáng chú ý đối với tôi trên NodeJS, nếu tôi đang làm việc với cơ sở dữ liệu và tên trường của tôi được phân tách dưới, tôi cũng sử dụng chúng trong các khóa cấu trúc.

Điều này là do các trường db có rất nhiều từ viết tắt / viết tắt nên một cái gì đó như appSNSInterfaceRRTest trông hơi lộn xộn nhưng app_sns_interface_rr_test đẹp hơn.

Trong các biến Javascript, tất cả các tên camelCase và tên lớp (hàm tạo) là RightCase, vì vậy bạn sẽ thấy một cái gì đó như

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

hoặc là

generalLedgerTask = new GeneralLedgerTask( devTask );

Và tất nhiên trong các khóa / chuỗi JSON được gói trong hai dấu ngoặc kép, nhưng sau đó bạn chỉ cần sử dụng JSON.opesify và truyền vào các đối tượng JS, vì vậy không cần phải lo lắng về điều đó.

Tôi đã vật lộn với điều này một chút cho đến khi tôi tìm thấy phương tiện hạnh phúc này giữa các quy ước đặt tên JSON và JS.


1
tương tự ở đây Nhận JSON với sn_case tại máy khách Android có vẻ khó xử !! Ngoài ra cơ sở dữ liệu không phân biệt vỏ cho các tên cột, vì vậy Snake_case dường như là tốt nhất cho cơ sở dữ liệu.
huyền thoại mã hóa

@mythicalcoder JSON trong Java không phải là nội tại trong lõi của nó. Java chỉ sử dụng các gói bên ngoài để phân tích cú pháp Java org.json, vd gson. Nhận dữ liệu của sn_case không ảnh hưởng nhiều như vậy ...JSONObject.get('snake_case_key_here')
Abel Callejo

9

Có vẻ như có đủ biến thể mà mọi người bỏ qua để cho phép chuyển đổi từ tất cả các quy ước sang người khác: http://www.cowtowncoder.com/blog/archives/cat_json.html

Đáng chú ý, trình phân tích cú pháp Jackson JSON được đề cập thích hơn bean_naming.


5
Sửa lỗi nhỏ: Jackson mặc định theo quy ước đặt tên đậu Java, đó là (dưới) Camel Case, như thế beanNaming.
StaxMan

0

Tôi nghĩ rằng không có quy ước đặt tên chính thức cho JSON, nhưng bạn có thể theo dõi một số nhà lãnh đạo trong ngành để xem nó hoạt động như thế nào.

Google, một trong những công ty CNTT lớn nhất thế giới, có hướng dẫn về kiểu JSON: https://google.github.io/styleguide/jsoncstyleguide.xml

Tận dụng lợi thế, bạn có thể tìm thấy hướng dẫn về kiểu dáng khác, mà Google xác định, tại đây: https://github.com/google/styleguide


0

Như những người khác đã tuyên bố không có tiêu chuẩn, vì vậy bạn nên chọn một mình. Dưới đây là một vài điều cần xem xét khi làm như vậy:

  1. Nếu bạn đang sử dụng JavaScript để sử dụng JSON thì việc sử dụng cùng một quy ước đặt tên cho các thuộc tính trong cả hai sẽ cung cấp tính nhất quán trực quan và có thể một số cơ hội để sử dụng lại mã sạch hơn.

  2. Một lý do nhỏ để tránh trường hợp kebab là các dấu gạch nối có thể xung đột trực quan với các -ký tự xuất hiện trong các giá trị.

    {
      "bank-balance": -10
    }

1
Snake_case sử dụng dấu gạch dưới, không dấu gạch ngang.
Perbus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.