web-dev-qa-db-ja.com

JSON命名規則

JSONの命名に関する標準はありますか?ほとんどの例では、すべて小文字をアンダースコア(lower_case)で区切って使用しています。しかし、あなたはPascalCaseまたはcamelCaseを使うことができますか?

308
GeorgeU

SINGLE規格はありませんが、あなたが言及した3つのスタイル( "Pascal/Microsoft"、 "Java"(camelCase)、および "C"(アンダースコア、snake_case))、そして少なくとももう1つ、kebab-caseのようなlonger-name ).

それは主に、問題となっているサービスのバックグラウンド開発者が何を持っていたかに依存しているようです。 c/c ++のバックグラウンド(あるいは多くのスクリプト言語を含む同様の命名を採用している言語、Rubyなど)を持つ人々は、しばしばアンダースコアの変種を選びます。そして同様に休む(Java対.NET)。たとえば、言及されたJacksonライブラリは、Java Beanの命名規則(camelCase)を想定しています。

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

199
StaxMan

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

それはそれをお勧めします:

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

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

例:

{
  "thisPropertyIsAnIdentifier": "identifier value"
}

私たちのチームはこの規約を使います。

326
Tho

前提

JSONにはキーの標準的な名前付けはありません

運転要因

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 - ヘビケース - 全会一致
  2. Python"JSON"PHP - ヘビケース - 全会一致
  3. Python"JSON"Java - snake_case - 下記のJava問題をご覧ください
  4. Python"JSON"JavaScript - snake_case は意味があります。とにかくフロントエンドをねじ込む
  5. Python"JSON"あなたは知らない - snake_case は意味をなさない。とにかくパーサーをねじ込む
  6. PHP"JSON"Python - ヘビケース - 全会一致
  7. PHP"JSON"PHP - スネークケース - 全会一致
  8. PHP"JSON"Java - snake_case - 下記のJava問題をご覧ください
  9. PHP"JSON"JavaScript - snake_case は意味があります。とにかくフロントエンドをねじ込む
  10. PHP"JSON"PHP - スネークケース
  11. PHP"JSON"あなたは知りません - snake_case は意味があります。とにかくパーサーをねじ込む
  12. Java"JSON"Python - snake_case - 下のJava問題をご覧ください
  13. Java"JSON"PHP - snake_case - 下のJava問題をご覧ください
  14. Java"JSON"Java - キャメルケース
  15. Java"JSON"JavaScript - キャメルケース
  16. Java"JSON"あなたが知らない - camelCase は意味があるでしょう。とにかくパーサーをねじ込む
  17. JavaScript"JSON"Python - snake_case は意味があります。とにかくフロントエンドをねじ込む
  18. JavaScript"JSON"PHP - snake_case は意味があります。とにかくフロントエンドをねじ込む
  19. JavaScript"JSON"Java - キャメルケース - 全会一致
  20. JavaScript"JSON"JavaScript - キャメルケース - 全会一致

Javaの問題

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

Javaのorg.jsonpackageの例

JsonObject.getString("snake_cased_key")

Javaのcom.google.gsonpackageの例

JsonElement.getAsString("snake_cased_key")

いくつかの実際の実装

結論

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

考慮すべきもう1つのことは、JSONジェネレーターとJSONパーサーおよび/またはフロントエンドJavaScriptにかけるべき重みです。一般に、JSONパーサー側ではなくJSONジェネレーター側に重点を置く必要があります。これは、ビジネスロジックが通常JSONジェネレータ側にあるためです。

また、JSONパーサー側がわからない場合は、これまでに何ができるかを宣言できます。

135
Abel Callejo

特に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の命名規則の間にこの幸せな媒体が見つかるまで、私はこれに少し苦労しました。

15
Clarence Liu

すべての規約から他の規約への変換を許可するのに十分なバリエーションがあると思われます。 http://www.cowtowncoder.com/blog/archives/cat_json.html

特に、言及したJackson JSONパーサーはbean_namingを好みます。

9
entropo

JSONには正式な命名規則はないと思いますが、業界のリーダーの中にはそれがどのように機能しているかを見るために従うことができる人もいます。

世界最大のIT企業の1つであるGoogleには、JSONスタイルガイドがあります。 https://google.github.io/styleguide/jsoncstyleguide.xml

利用すると、Googleが定義している他のスタイルガイドを見つけることができます。 https://github.com/google/styleguide

他の人が言っているように標準はないので、自分で選ぶべきです。その際に考慮すべき点がいくつかあります。

  1. JavaScriptを使用してJSONを消費している場合、両方のプロパティに同じ命名規則を使用すると、視覚的な一貫性が得られ、コードを再利用する機会が生じる可能性があります。

  2. Kebab-caseを回避する小さな理由は、ハイフンが値に現れる-文字と視覚的に衝突する可能性があることです。

    {
      "bank-balance": -10
    }