2017-08-02 15 views
0

Jsonを直列化することができるJavaでPOJOクラスを作成する可能性はありますか?JavaのPOJOに不変フィールドのJsonを非直列化する

{ 
    "name": "value", 
    "random-value-01" : { 
     "constant-field-00":"value_00", 
     "constant-field-01":"value_01" 
    }, 
    "random-value-02" : { 
     "constant-field-00":"value_02", 
     "constant-field-01":"value_03" 
    }, 
    ... 
    "random-value-XX" : { 
     "constant-field-00":"value", 
     "constant-field-01":"value" 
    }, 
} 
+1

マップを使用する場合を除きます。しかし、私はあなたがなぜそれを最初の場所でフォーマットしているのかという疑問を抱いています。 –

答えて

1

あなたrandom-value-x JsonObjectsのすべてが(つまり2つの定数フィールドがそれぞれに同じ)同じフォーマットを持っている場合、あなたはいつもに似何かかもしれない:彼らはなら

class RandomValue { 
    private final String constantField00; 
    private final String constantField01; 
    // ... Constructors, getters, etc. 
} 

class Pojo { 
    private final String name; 
    private final Map<String, RandomValue> randomValues; 
    // ... 
} 

を注文した(つまり、彼らしているすべての同じrandom-valueproperty-01property-02、などのように)、あなたはまたMapが可能かもしれないあなたのRandomValue要素のList(またはSet、など) 。


、一方、constant-field sが、同様のすべてのランダムな鍵である場合、あなたはおそらくより多くのようなもので立ち往生している:

additionalInfo Mapへの鍵である
class Pojo { 
    private final String name; 
    private final Map<String, Map<String, String>> additionalInfo; 
    // ... 
} 

constant-field-0xs)〜Stringvalues)のMapの値がStringです。

0

これはそのような答えではありませんが、一般的な話題に関心を寄せているかもしれません。

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は吸う)。これは、システムインテグレーション、メンテナンス、データ定義によるアジャイル化などのノック・オンの利点をもたらしました。

関連する問題