これはそのような答えではありませんが、一般的な話題に関心を寄せているかもしれません。
JSONの別のアプローチに興味のある人は、ITUのASN.1を見ることができます。 Google Protocol Buffersのようなものだとは思っていますが、JSON、XML、さまざまなプロパティを持つ全バイナリワイヤフォーマットなど、さまざまなワイヤフォーマットの負荷があります。基本的には、すべての機会と目的に合わせた電線形式があります。
これは非常に便利なことがあります。分散型システムの周りにデータを送りたい場合や、低帯域幅の無線リンクの終わりにあるマイクロコントローラでそのシステムの一部を使用している場合、他の部分はサーバー上のJavaである場合は、システム全体単一のスキーマ(単一の真実のポイントとして機能する)でのメッセージング。これにより、使用するツールに応じて、C、C++、Java、C#、さらにはADA、VHDLで平易な古いオブジェクトを生成することができます。 Pythonは注目に値する抜粋です(コード・ファーストASN1を行うPythonモジュールがあります。
JSONをワイヤ形式として使用するのは比較的最近の標準ですが、商用ツールの中にはそれをサポートするものがあります。本当にそれを必要とする人のために、それは非常に便利なツールになることができます。
この特定の質問の観点から、ASN.1とJSONをワイヤ形式としてサポートするツールは有用ではありません。任意のJSONを使用して自動的にクラスにコンパイルできるスキーマを生成することはできません。他の言語/プラットフォームがデータを消費または生成しやすいようにしたい、新鮮なプロジェクトには便利です。
私はJSONスキーマを消費するまともなC#クラスジェネレータを探しました。残念ながらそこの最高の一人はoneof
を扱っていませんでした。しかし、私はASN.1(これに相当するCHOICE
を持っています)用のツールは、C#、Java、C/C++で完全なクラスを生成します。だから私はC#とCに(この特定のプロジェクトで)コンパイルするASN.1スキーマがあり、JSON、XML、バイナリのワイヤフォーマットを扱うという面白い状況です。生成されたクラスは、独自の検証を実行するのに十分スマートです.JSONスキーマのバリデーターを通してJSONを渡す必要はありません。
JSONスキーマとASN.1スキーマは、仕様に入れることができる詳細の点で広く比較可能です。同様に、ASN.1スキーマとXSD XMLスキーマは、ほぼ同じです(2つの言語の間で公式に標準化された翻訳さえあります)。 JSONまたはXSDスキーマの代わりにASN.1スキーマを使用した場合の利点は、ツール(特に商用ツール)がJSONおよびXSDスキーマ(たとえばMicrosoftのxsd)に関連するクラス生成ツールよりも大幅に徹底しているように見えることです。 exeは吸う)。これは、システムインテグレーション、メンテナンス、データ定義によるアジャイル化などのノック・オンの利点をもたらしました。
マップを使用する場合を除きます。しかし、私はあなたがなぜそれを最初の場所でフォーマットしているのかという疑問を抱いています。 –