web-dev-qa-db-ja.com

jsonの解析に「標準」の方法を使用する代わりに回避策を使用する

Webサーバーからのjson応答から1つのプロパティを取得することを含むJavaアプリケーションの開発を任されています。

通常、jsonを解析するときは、jsonのpojoモデルを作成し、次にgooglegsonライブラリを使用してオブジェクトを作成する標準的な方法を使用します。ただし、今回は、jsonから1つのプロパティを取得するだけでポジョを作成するのはやり過ぎだと感じています。そのプロパティが残るまで、文字列をつなぎ合わせてさいの目に切る回避策を使用したいと思います。欲しいです。

だから私の質問は、pojoとgsonを使用する標準的な方法を使用する代わりに、そのような回避策を実行することにマイナス面はありますか?

2
SteelToe

はい、欠点があります。半分焼きたてのパーサーにバグがあります。確かにJSONは単純ですが、それでもトリッキーなエスケープ状況に遭遇する可能性があります。

既存の実証済みのJSON解析メソッドを使用して、より難しい問題のために脳細胞を保存するだけです。

23
whatsisname

新しいJavaクラスが1つだけ必要なときに完全なJSON応答をマップするクラスを作成しないようにするには、解析された JsonSimple のようなライブラリを使用できます。 HashMapを含むJSONオブジェクト。次に、その1つのキーの値を、そのHashMapに含まれている他のことを言及せずに取得できます。

9
Philipp

時期尚早の最適化。

主な欠点は、自家製のソリューションに費やされる時間です。

最初に、ソリューションの開発、およびバグの修正に時間を費やします。バグがあると、あなたの時間だけでなく、他の開発者、テスター、サポート担当者などの同僚の時間も無駄にする可能性があります。

次に、コードを読まなければならないすべての人は、ここで何が起こっているのかを理解するために余分な時間を費やす必要があります。 JSONを逆シリアル化する方法は知っていますが、他の人はあなたのアプローチに精通していません。

理想的には、要件は決して変更されず、コードを変更する必要はありません。現実には、物事はうまくいかないかもしれません。要件が変更された場合(他のフィールドを逆シリアル化する必要がある、コードをJSON構造の変更に適合させるなど)、開発者の時間、コード、バグが増える可能性があります。

あなたが本当に速くて本当に良いとしましょう。ソリューションの実装は1時間で完了しました。あなたの時給はいくらですか?節約されたCPUサイクルに関して、カスタムソリューションが雇用主にどれだけ節約できるでしょうか。あなたは絵を手に入れます。

4

欠点は、jsonを解析しようとするときではなく、存在しないプロパティにアクセスしようとすると、コードが例外をスローすることです。

私はあなたのジレンマに多くの同情を持っています。私はc#のグラフプラグインからjsonモデルを消費しなければなりませんでした

オブジェクトに一致するクラスを作成する通常の方法を実行したところ、グラフ作成アプリの作成者がJavaScriptの「機能」を完全に使用して強く入力しないことがわかりました。

プロパティXは、それぞれ異なるサブオブジェクトを持つ5つの異なるモデルの1つである可能性があるため、モデルを再作成することが不可能になりました。

幸い、c#には、私が使用できたdynamicクラスがあります。 Javaにも同等の機能があるとは思いませんが、ネストされたHashtableに逆シリアル化できますか?

1
Ewan

コンパクトなJSON解析ライブラリは JSON-Java です。 POJOクラスにマップされるのではなく、解析されたJSONのナビゲート可能な表現を提供します。それは自己完結型であり、意味は他のライブラリに依存しません(私が非常に好きな事実)。本格的なJSON/POJOマッパーが私にはやり過ぎだと思われたときに、私はそれを数回使用しました。

1
Ralf Kleberhoff