JSON命名規則[終了]


379

JSON命名の標準はありますか?アンダースコア(lower_case)で区切られたすべての小文字を使用したほとんどの例が表示されます。しかし、PascalCaseまたはcamelCaseを使用できますか?


12
業界のリーダーが何を選んだのか、私は興味を持ちました。TwitterとFacebook APIはsnake_caseを使用し、MicrosoftとGoogleはcamelCaseを使用します。
Justin

2
@Justinは、TwitterがRubyを使用し、FacebookがPHPを使用しているためです。RubyとPHPはsnake_caseに入っています。MicrosoftとGoogleは、それぞれC / .NETとJavaをよく使用しています。ああそうです。NetとJavaがキャメルケースに入っているのかもしれません。それはすべてプログラミング言語の規約に関するものです
Abel Callejo '12 / 12/17

1
規格はありませんが、慣例では受信系の技術の規格を利用しているようです。
ヘッスルのマーティン、

1
すべて正解です。JSONの名前/キーには厳密な規則はありません。ただし、JavaScriptのdot(。)表記ではアクセスできず、面倒だと思うarray []表記を使用してアクセスする必要があるため、ケバブケースは避けることを強くお勧めします。
saurabh

2
主に意見ベースとして閉鎖されていますか?OPは、フォーマットの機能/制限に関する事実を求めていました。彼は「あなたができる」ではなく「あなたができる」と言った。おそらく、OPは5人の個人に対して十分に明確にそれを語っていませんでしたが、彼が何を求めているのか理解できないようにするには、読解力がかなり不足している必要があります。
dynamichael

回答:


251

SINGLE標準はありませんが、あなたが言及する3つのスタイル( "Pascal / Microsoft"、 "Java"(camelCase)と「C」(アンダースコア、snake_caseならびに少なくとも1以上を、 - ))kebab-caseのようなlonger-name)。

これは主に、問題のサービスの開発者のバックグラウンドに依存しているようです。c / c ++のバックグラウンド(または多くのスクリプト言語、ルビなどを含む同様の命名法を採用している言語)を使用している人は、アンダースコアバリアントを選択することがよくあります。同様に残ります(Java対.NET)。たとえば、言及されたジャクソンライブラリは、Java Beanの命名規則(camelCase

更新:「標準」の私の定義は、単一の規則です。したがって、「はい、多くの標準があります」と主張することもできますが、私には複数のがありNaming Conventions、どれも「The」標準ではありません。それらの1つは特定のプラットフォームの標準と見なすことができますが、JSONは、あまり意味のないプラットフォーム間の相互運用性のために使用されるため、


4
開発者の背景にこだわることは重要ですが、JSONはJavaScript標準に固執します。最初の発言は正確ではありません。ただし、必ずチームの命名規則に固執してください。
Anubian Noob

8
JSONとJavascriptの間の接続を主張する人々(歴史的遺産を超えて)と、JSONをJavascriptに接続している現在のところほとんどないと考える人々の間には一定の摩擦があるため、いくつかの統計を見るのは興味深いでしょう。私は後者のキャンプに所属しています。しかし、私は相対的な使用パターンを知ることに興味があります。
StaxMan、2015年

@StaxMan C#は、キャメルケースではなく、PascalCaseをほとんどのケースで使用します。
ArtOfCode

@ArtOfCodeはい。あなたの論点は何ですか?(また、「アッパーキャメルケース」と呼ばれることもあるパスカルケース)
StaxMan

@StaxManあなたはグーグルスタイルガイドの言及が含まれるようにあなたの答えを更新し検討する
garrettmac

402

このドキュメントでは、Google JSONスタイルガイド(GoogleでJSON APIを構築するための推奨事項)、

次のことをお勧めします。

  1. プロパティ名はcamelCased、ASCII文字列でなければなりません。

  2. 最初の文字は、文字、アンダースコア(_)、またはドル記号($)でなければなりません。

例:

{
  "thisPropertyIsAnIdentifier": "identifier value"
}

私のチームはこの慣例に従っています。


8
どうやらグーグルはガイドラインを変更しました、キャメルケースについて何も見つけることができないか、ドキュメントで_や$で始まるものはもうありません...
TheEye

32
@TheEyeまだあります。ドロップダウンをクリックするだけです。
gdw2 14

5
いい目、@ gdw2。将来的には、で矢印ボタンをクリックした場合ですProperty Name Guidelines->Property Name Format->Choose meaningful property names.
Panzercrisis 2014

3
アンダースコアを使用してプロパティ名にプレフィックスを付ける理由と時期を誰かが説明できますか?参考文献は意見だけでなく、役に立つでしょう。
Sean Glover

4
グーグルを引用することは適切な答えではありません。それらは特定の規約/ガイドラインをサポートしているだけで、Java指向であるのでJavaが理にかなっているように見えます。
ThomasAndreèWang 2017

186

前提

JSONには、キーの標準的な命名規則はありません。仕様のオブジェクトセクションによると:

JSON構文は、名前として使用される文字列に制限を課しません...

つまり、camelCaseまたはsnake_caseはずです。

運転要因

JSON命名規則を課すことは非常に混乱します。ただし、これをコンポーネントに分解すると、簡単にわかります。

  1. JSONを生成するためのプログラミング言語

    • Python-snake_case
    • PHP-snake_case
    • Java-キャメルケース
    • JavaScript-キャメルケース
  2. JSON自体にはキーの標準の命名規則はありません

  3. JSONを解析するためのプログラミング言語

    • Python-snake_case
    • PHP-snake_case
    • Java-キャメルケース
    • JavaScript-キャメルケース

コンポーネントを組み合わせる

  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の問題

Javaの既存のJSONライブラリは、標準のdot.syntaxを使用するのではなく、メソッドにのみアクセスしてキーにアクセスするため、snake_caseはJavaエントリを使用するユーザーにとっても意味があります。つまり、dot.syntaxを実行できる他のプログラミング言語と比較して、Javaがsnake_casedキーにアクセスしてもそれほど問題にはなりません。

Javaの パッケージのorg.json

JsonObject.getString("snake_cased_key")

Javaの パッケージのcom.google.gson

JsonElement.getAsString("snake_cased_key")

いくつかの実際の実装

結論

JSON実装に適したJSON命名規則の選択は、テクノロジースタックによって異なります。snake_casecamelCase、またはその他の命名規則を使用できる場合があります。

考慮すべきもう1つのことは、JSONジェネレーターとJSONパーサーまたはフロントエンドJavaScript、あるいはその両方にかかる重みです。一般に、JSONパーサー側ではなく、JSONジェネレーター側により多くの重みを設定する必要があります。これは、ビジネスロジックが通常JSONジェネレーター側に存在するためです。

また、JSONパーサー側が不明な場合は、何が機能するかを宣言できます。


2
"Person":is n't camelCase :)
stoft

1
@stoftは、おそらくschema.orgの規約にも従っているためです。キーを大文字で始めることは、それが語彙エンティティであることを意味します。キーを小文字で始めることは、それが語彙プロパティであることを意味します。
Abel Callejo 2016年

2
Pythonバックエンド> JavaフロントエンドをcamelCaseにする必要があるという理由だけで、これらの考えに同意しませんが、Pythonフロントエンドを追加し、バックエンドと1つのフロントエンドを危険にさらしています。それは、「標準」によるバックエンドのそれであるはずです。フロントエンドパーサーはとにかく簡単に適応できます
Bojan Kogoj 2018

2
ここでの私の懸念は、「あなたのテクノロジー」スタックへの参照があることです。特にHTTPサーバーによって提供される場合、JSONのプロデューサーは、誰または何がそれを消費しているか、またはどのような理由でそれを知っているべきではありません。多くのプロデューサーとコンシューマー間の通信方法としてJSONが使用されている場合、プロデューサーのテクノロジースタックを考慮する必要はありません。
ロビーウェアハム、

1
@RobbieWarehamどういうわけかそれに同意します。ここで重要なのは、「標準では」正式な命名規則がないことです。つまり、テクノロジースタックを確認する「事実上の」を選択する必要があります。テクノロジースタックを調べることが最善の方法だと思います。Facebookを見て、彼らは歴史的にJavaScriptを尊重し、snakeCaseを使用しましたか?いや!彼らは、PHPのsnake_caseを使用することにしました。
Abel Callejo、2018年

18

特にNodeJSでは、データベースを使用していて、フィールド名がアンダースコアで区切られている場合は、それらを構造体キーでも使用します。

これは、dbフィールドに多くの頭字語/略語があるため、appSNSInterfaceRRTestのようなものは少し乱雑に見えますが、app_sns_interface_rr_testの方が優れているためです。

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
こっちも一緒。Androidクライアントでsnake_caseを使用してJSONを受信すると、ぎこちなく見えます!! また、データベースでは列名の大文字と小文字が区別されないため、snake_caseがデータベースに最適と思われます。
mythicalcoder

@mythicalcoder JavaのJSONは、コアに組み込まれていません。Javaはorg.json、Javaの解析に外部パッケージのみを使用しますgson。snake_caseデータを受信して​​もそれほど問題はありません...JSONObject.get('snake_case_key_here')
Abel Callejo


0

JSONの正式な命名規則はないと思いますが、いくつかの業界リーダーをフォローして、JSONがどのように機能しているかを確認できます。

世界最大のIT企業の1つである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はダッシュではなくアンダースコアを使用します。
ペルセバス2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.