JSONキーでハイフンを使用することは悪い習慣ですか?


12

ハイフン(ケバブケース)を使用するJSONキーへのアクセスに関する多くの質問が表示されますが、今ではキーにキャメルケースまたはsnake_caseを使用するべきかどうか疑問に思っています。言語間で移植すると、ハイフンが複雑なマッピングを作成することもあります。一部のJSONデシリアライズライブラリがこれらのキーをcamelCaseスタイルに変換するのを見てきました。

例:

var something = {
  "some-value": 'thing'
}

var something = {
  "someValue": 'thing',
  "some_other_value": 'thing_two'
}

4
RESTはペイロード形式について何も言うことはありません。
Eric Stein

2
JSONでケバブケースを使用する理由 プログラミング環境の命名規則に従うことは常に良い習慣であり、JavaScriptの変数にcamelCaseを使用することは標準的な慣習であるため、人々は通常JSONにcamelCaseを使用します。ただし、JavaScriptとの通信にJSONを使用していると仮定しています。
Alternatex

1
質問にjavascriptのタグが付けられているのがわかりますが、質問自体は、異なる言語/ライブラリ間のAPIに関するもののようです。JavaScriptが気になる場合は、ドット表記はハイフンでは機能しないことに注意してください。
イズカタ、

5
JSONは言語に依存しないため、特定の言語の構文に制約されるべきではないため、これは実際に悪い習慣ではありません。そうは言っても、すべての主流言語の識別子に直接マッピングできるので、英数字のみを使用するのは理にかなっており、マッピングの問題が最小限に抑えられるだけです。
JacquesB

1
@Alternatex:「ケバブケース」の場合は+1 :-)
gnasher729 2016年

回答:


13

有効なUTF-8であり、コードポイントが含まれていない限り、JSONキーとして何でも使用できます。選択したプログラミング言語でキーを文字列として表すことができれば便利です。同じ文字列の異なるUnicode表現を使用しないことをお勧めします(たとえば、「Ä」は1つまたは2つのコードポイントとして記述されます)。

コメントを読む:JSON辞書のキーと一致するインスタンス変数を持つクラスを作成しようとする人がいるようです。もちろん、COBOLを記述しない限り、キーが「何らかの値」の場合は機能しません。これは見当違いです。私は自分が望む方法で設計されたモデルクラスを持っています。JSONは、モデルクラスを埋めるために使用されます。私は、サーバーの連中は、キーのために使用することを決めたとの中にそれを置くものは何でも取るよ、私のモデルオブジェクト。


1
急いで、あなたの消費するプログラムがjsonキーにどのようにアクセスするかという質問をします。通常、これはjsonをオブジェクトとして解析することで行われます。これを防ぐハイフンやその他の文字を使用すると、消費者の生活が困難になります
Ewan

そして、これは有効です:{"❓": "✅"}
Vinicius Brasil

1
ハイフンはどのようにして何かを防ぐのですか?辞書を取得し、「some-key」をキーとして使用できます。「❓」をキーとして使用することもできます。
gnasher729

8

多くのJSONシリアル化システムがあり、それらが統合する言語での使用に適さないフィールド名間のマッピングを処理する以上の能力があります。ほとんどの場合、それらは使用するのが難しくなく、ほんの少しの追加の労力しか必要としません。理想的な世界では必要はありませんが、APIがすでにダッシュを使用している場合は、ダッシュを変更することで病気よりも治療が悪化します。また、特定の言語、特にLISPに基づく言語では、ダッシュの使用が最も一般的なスタイルであるため、APIのコンシューマーには、別の形式ではなくダッシュを喜んで表示する少数派がいる可能性があります。


私はこれをできるだけ早く投票します。洞察を見つけました。ありがとうございます。
Matt Oaxaca

1

業界でしばらく時間を過ごし、いくつかのシステムで作業した後。JSONキーのベストプラクティスや適切な大文字小文字の区別はないと思います。書式設定(ケーシング/コードスタイルなど)の最も重要な側面は、一貫性とチームの採用です。

コードベースが断片化されており、一貫性がない場合は、チームとして会合し、一貫したスタイルについて合意してから、フォーマットをまとめて監視します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.