JSON 명명 규칙 [닫기]


379

JSON 명명에 대한 표준이 있습니까? 밑줄 (lower_case)로 구분 된 모든 소문자를 사용하는 대부분의 예제를 봅니다. 그러나 PascalCase 또는 camelCase를 사용할 수 있습니까?


12
일부 업계 리더들이 무엇을 선택했는지 궁금했습니다. 트위터와 페이스 북 API는 snake_case를 사용하고 마이크로 소프트와 구글은 camelCase를 사용합니다.
Justin

2
@Justin은 Twitter가 Ruby를 사용하고 Facebook은 PHP를 사용하기 때문입니다. 루비와 PHP는 snake_case에 들어갑니다. Microsoft와 Google은 각각 C / .NET과 Java를 잘 사용하고 있습니다. 그렇습니다. .Net과 Java는 camelCase에 있습니다. 프로그래밍 언어의 규칙에 관한 모든 것
Abel Callejo

1
표준은 없지만 수신 시스템의 기술 표준을 사용하는 것으로 보입니다.
Martin of Hessle

1
JSON에는 이름 / 키에 대한 엄격한 규칙이 없습니다. 비록 JavaScript에서 dot (.) 표기법으로 액세스 할 수 없으며 지루하다고 생각되는 array [] 표기법을 사용하여 액세스해야하므로 케밥 케이스를 피하는 것이 좋습니다.
saurabh

2
주로 의견 기반으로 문을 닫습니까? OP는 다른 사람의 의견이 아닌 형식의 기능 / 제한에 관한 사실을 요구했습니다. 그는 "할 수있다"고 "당신은 할 수 없다"고 말했다. 아마도 OP가 그 5 명에게 충분히 명확하게 말하지 않았지만, 그가 요구하는 것을 이해하지 못하기 위해서는 읽기 이해력이 다소 떨어질 것입니다.
dynamichael

답변:


251

SINGLE 표준은 없지만 언급 한 3 가지 스타일 ( "Pascal / Microsoft", "Java"( camelCase) 및 "C"(밑줄, snake_case)) kebab-case과 같은 스타일을 하나 이상 보았습니다 longer-name.

문제의 서비스 개발자가 무엇을 가지고 있는지에 달려있는 것 같습니다. c / c ++ 배경을 가진 사람들 (또는 많은 명명 언어를 포함하는 유사한 이름을 채택하는 언어, 루비 등)은 종종 밑줄 변형을 선택합니다. 비슷하게 휴식하십시오 (자바 대 .NET). 예를 들어 언급 된 Jackson 라이브러리는 Java Bean 명명 규칙 ( camelCase)을 가정합니다.

업데이트 : "표준"에 대한 나의 정의는 단일 규칙입니다. 따라서 "그렇다, 많은 표준이있다"고 주장 할 수는 있지만, 나에게는 여러 가지가 있지만 Naming Conventions전체적으로 "The"표준은 없다. 그중 하나는 특정 플랫폼의 표준으로 간주 될 수 있지만 JSON은 많은 의미가 있거나 그렇지 않은 플랫폼 간의 상호 운용성에 사용된다는 점을 고려할 때.


4
개발자의 배경을 고수하는 것이 중요하지만 JSON은 Javascript 표준을 고수합니다. 첫 번째 진술이 정확하지 않습니다. 그러나 팀의 명명 규칙을 반드시 준수하십시오.
Anubian Noob

8
(역사적 유산이 아닌) JSON과 Javascript 사이의 연결을 주장하는 사람들과 현재 JSON과 Javascript를 연결하는 사람이 거의 없다고 생각하는 사람들 사이에 마찰이 일정하기 때문에 일부 통계를 보는 것이 흥미로울 것입니다. 나는 후자 캠프에 속해 있습니다. 그러나 상대적인 사용 패턴을 알고 싶습니다.
StaxMan

@StaxMan C #은 camelCase가 아닌 대부분의 경우 PascalCase를 사용합니다.
ArtOfCode

@ArtOfCode 예. 요점이 뭐야? (또한 파스칼 사건은 때때로 "상단 낙타 사건"이라고 불림)
StaxMan

@StaxMan Google 스타일 가이드
garrettmac에

402

이 문서에서 Google JSON 스타일 가이드 (Google에서 JSON API를 빌드하기위한 권장 사항)에서

다음을 권장합니다.

  1. 속성 이름은 camelCased , ASCII 문자열 이어야합니다 .

  2. 첫 번째 문자는 문자, 밑줄 (_) 또는 달러 기호 ($) 여야합니다.

예:

{
  "thisPropertyIsAnIdentifier": "identifier value"
}

우리 팀은이 규칙을 따릅니다.


8
분명히 구글은 지침을 변경했습니다, 더 이상 문서에서 낙타 사건이나 문자 _ 또는 $로 시작하는 것을 찾을 수 없습니다 ...
TheEye

32
@TheEye 여전히 있습니다. 드롭 다운을 클릭하면됩니다.
gdw2

5
좋은 눈, @ gdw2. 앞으로 다른 사람의 경우 옆의 화살표 버튼을 클릭하면됩니다 Property Name Guidelines->Property Name Format->Choose meaningful property names..
Panzercrisis

3
속성 이름 앞에 밑줄을 사용하는 이유와시기를 누군가가 설명 할 수 있습니까? 참고는 의견이 아니라 유용 할 것입니다.
Sean Glover

4
Google을 인용하는 것은 적절한 답변이 아닙니다. 그들은 단지 특정 컨벤션 / 지침을 지원하며 꽤 자바 지향적이므로 Java가 의미가있는 것처럼 보입니다.
Thomas Andreè Wang

186

전제

JSON에는 표준 키 이름없습니다 . 스펙 의 오브젝트 섹션에 따르면 :

JSON 구문은 이름으로 사용되는 문자열에 제한을 두지 않습니다.

camelCase 또는 snake_case 가 제대로 작동 한다는 의미 입니다.

추진 요인

JSON 명명 규칙을 적용하는 것은 매우 혼란 스럽습니다. 그러나 구성 요소로 분류하면 쉽게 파악할 수 있습니다.

  1. JSON 생성을위한 프로그래밍 언어

    • 파이썬-snake_case
    • PHP-snake_case
    • 자바-카멜 케이스
    • 자바 스크립트-camelCase
  2. JSON 자체에는 표준 키 이름이 없습니다.

  3. JSON 구문 분석을위한 프로그래밍 언어

    • 파이썬-snake_case
    • PHP-snake_case
    • 자바-카멜 케이스
    • 자바 스크립트-camelCase

구성 요소 믹스 매치

  1. 파이썬 »JSON» 파이썬 - 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» 파이썬 - snake_case - 만장일치
  7. PHP »JSON» PHP - snake_case - 만장일치
  8. PHP »JSON» 자바 - snake_case은 - 참조하십시오 자바 문제가 아래를
  9. PHP »JSON» 자바 스크립트 - 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. 자바 스크립트 »JSON» 자바 - 낙타 표기법 - 만장일치
  19. 자바 스크립트 »JSON» 자바 스크립트 - 낙타 표기법 - 원본

자바 문제

snake_case 는 Java 용 기존 JSON 라이브러리가 표준 dot.syntax 대신 키에 액세스하는 메소드 만 사용하므로 Java 항목이있는 사용자에게는 여전히 의미가 있습니다 . 자바는 액세스하는 것이 그 정도를 해치지 않을 것이라고이 수단 snake_cased 할 수있는 다른 프로그래밍 언어에 비해 키를 dot.syntax을 .

Java 패키지 의 예org.json

JsonObject.getString("snake_cased_key")

Java 패키지 의 예com.google.gson

JsonElement.getAsString("snake_cased_key")

실제 구현

결론

JSON 구현에 적합한 JSON 이름 지정 규칙을 선택하는 것은 기술 스택에 따라 다릅니다. snake_case , camelCase 또는 다른 명명 규칙을 사용할 수있는 경우가 있습니다 .

고려해야 할 또 다른 사항은 JSON 생성기 대 JSON 파서 및 / 또는 프론트 엔드 JavaScript에 부과되는 가중치입니다. 일반적으로 JSON 파서 쪽이 아닌 JSON 생성기쪽에 더 많은 가중치를 두어야합니다. 비즈니스 로직은 일반적으로 JSON 생성기쪽에 있기 때문입니다.

또한 JSON 파서 측면을 알 수없는 경우 무엇이 효과가 있는지 선언 할 수 있습니다.


2
"Person":is camelCase :)
stoft

1
@stoft는 아마도 schema.org의 규칙을 따랐기 때문일 것입니다. 대문자로 키를 시작하면 키가 어휘 엔티티임을 의미합니다. 소문자로 키를 시작한다는 것은 어휘 속성임을 의미합니다.
Abel Callejo

2
파이썬 백엔드> Java 프론트 엔드가 camelCase이어야하기 때문에 이러한 아이디어에 동의하지 않지만 Python 프론트 엔드를 추가하면 백엔드와 하나의 프론트 엔드가 손상됩니다. 백엔드의 "표준"수준에 따라 결정됩니다. 프론트 엔드 파서는 어쨌든 쉽게 적응할 수 있습니다
Bojan Kogoj

2
여기서 내가 걱정하는 것은 "귀하의 기술"스택에 대한 참조입니다. 특히 HTTP 서버에서 서비스를 제공 할 경우 JSON 제작자는 누가 또는 무엇을 소비하는지 또는 어떤 이유로 알 수 없어야합니다. JSON을 많은 생산자와 소비자 간의 통신 방법으로 사용하는 경우 생산자의 기술 스택을 고려해야합니다.
로비웨어 햄

1
@ RobbieWareham 나는 어떻게 든 동의합니다. 여기서 "표준으로"공식 명명 규칙이 없다는 것입니다. 따라서 기술 스택을 보는 "사실상"을 선택해야 할 수도 있습니다. 기술 스택을 살펴 보는 것이 가장 좋은 방법이라고 생각합니다. 페이스 북을 살펴보면, 역사적으로 JavaScript를 존중하고 snakeCase를 사용 했습니까? 아냐! 그들은 PHP의 snake_case를 고수하기로 결정했습니다.
Abel Callejo

18

특히 NodeJS에서 데이터베이스 작업 중이고 필드 이름이 밑줄로 구분되어 있으면 구조체 키에도 사용합니다.

db 필드에는 두문자어 / 약어가 많기 때문에 appSNSInterfaceRRTest 와 같은 것이 약간 지저분하지만 app_sns_interface_rr_test 가 더 좋기 때문 입니다.

자바 스크립트에서 변수는 모두 camelCase이고 클래스 이름 (생성자)은 ProperCase이므로 다음과 같은 것을 볼 수 있습니다

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

또는

generalLedgerTask = new GeneralLedgerTask( devTask );

물론 JSON 키 / 문자열은 큰 따옴표로 묶여 있지만 JSON.stringify를 사용하고 JS 객체를 전달하면되므로 걱정할 필요가 없습니다.

JSON과 JS 명명 규칙 사이 에서이 행복한 매체를 찾을 때 까지이 문제로 조금 어려움을 겪었습니다.


1
여기에서도 마찬가지입니다. 안드로이드 클라이언트에서 snake_case로 JSON을받는 것은 어색해 보입니다! 또한 데이터베이스는 열 이름의 대소 문자를 구분하지 않으므로 snake_case가 데이터베이스에 가장 적합한 것으로 보입니다.
신화

Java의 @mythicalcoder JSON은 기본적으로 본질적이지 않습니다. 자바는 예를 들어 자바 구문 분석을위한 외부 패키지를 사용합니다 org.json, gson. snake_case 데이터를받는 것은 그렇게 많이 아프지 않습니다 ...JSONObject.get('snake_case_key_here')
Abel Callejo



0

다른 사람들이 언급했듯이 표준이 없으므로 스스로 선택해야합니다. 그렇게 할 때 고려해야 할 몇 가지 사항은 다음과 같습니다.

  1. JavaScript를 사용하여 JSON을 사용하는 경우 두 속성 모두에서 동일한 명명 규칙을 사용하면 시각적 일관성이 유지되고 코드를 더 명확하게 재사용 할 수 있습니다.

  2. 케밥 문자를 피해야하는 작은 이유 -는 값에 나타나는 문자 와 하이픈이 시각적으로 충돌 할 수 있기 때문 입니다.

    {
      "bank-balance": -10
    }

1
snake_case는 대시가 아닌 밑줄을 사용합니다.
percebus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.