現在開発中のサーバー側のC++プログラムによって生成されたJSONストリームがあります。私は結果のJSONのサンプルを与えられました。私はGSONやJacksonのようなツールで提供される通常のクラスマッピングを使用することができないため、jsonを手で解析する必要があることを心配しています。JSONからJavaオブジェクトへのjsonストリームのモデリングのベストプラクティス
提供している次の(やや)人為的な例を見てください。私が関心を持っているセクションは、さまざまなパラメータを持つメタデータ "serie"配列です。たとえば、キー(キー)は配列要素の1つにのみ存在します。これは、この配列を特定のクラスのコレクションにマップしようとしても問題にはなりませんか?
最後に、私は "ポイント"オブジェクトが似ていないことを心配しています。 JSON(旧式のJavaスイング開発者)の理解は非常に限られていますが、「ポイント」キーの値のペアが異なる可能性があることは問題です。
このjsonストリームの全体的なアイデアは、進行状況を示し、基盤となるハードウェアからより多くのものを求める仕組みを提供するテーブルを記述することです。また、なぜこのようなデータストリームをシンクライアント(htmlブラウザ)と共有しているのか不思議です。
私はこれが簡単にJavaオブジェクトに変換されないことを修正しましたか?
{
"abort": "abort;session=sessionname",
"data": {
"metadata": [
{
"protocol": "HTTP",
"serie": [
{
"name": "k1",
"description": "xDR ID",
"tooltip": "ASDR Unique Identifier - UiD",
"type": "int64",
"key": "1"
},
{
"name": "c1",
"description": "Answered",
"tooltip": "Request with Response",
"type": "bool"
},
{
"name": "c2",
"description": "Active",
"tooltip": "Session status: active or closed/down",
"type": "bool"
}
]
},
{
"protocol": "DNS",
"serie": [
{
"name": "k1",
"description": "xDR ID",
"tooltip": "ASDR Unique Identifier - UiD",
"type": "int64",
"key": "1"
},
{
"name": "k2",
"description": "Transaction ID",
"type": "int64",
"key": "1",
"display": "number"
},
{
"name": "k3",
"description": "Client",
"tooltip": "Source IP Address",
"type": "string",
"key": "1",
"display": "ip"
}
]
}
],
"summary": [
{
"timestamp": "1331192727",
"protocol": "HTTP",
"activity": "www.google.com",
"results": "OK",
"point": {
"k1": "1",
"c1": "true",
"c2": "true"
}
},
{
"timestamp": "1331192727",
"protocol": "DNS",
"activity": "www.google.com",
"results": "OK",
"point": {
"k1": "1",
"k2": "1.1.4.229"
}
}
]
},
"progress": {
"perc": "100"
},
"more": "13,39,1331192727,1331192760,27236,1.1.4.229,limit=1000,session=sessionname"
}
ご提供いただきありがとうございます。
GSONで-Dクロッツ
ありがとう。フィールドがjsonではなくクラスに存在しない場合、どうなりますか? –
私はそれが通常は解析例外をスローすると信じています。ターゲットクラスに表示されないフィールドを除外する 'ExclusionStrategy'を作成することで、それらのフィールドを無視させることができます。 (ただし、カスタムデシリアライザはより良いオプションです) –
カスタムデシリアライザの作成を避けることを望んでいます。これは開発サイクルの早い段階でこれをキャッチしています。私はこれについてもう少し頭を傷つけるつもりです。アドバイスをいただきありがとうございます。 –