現在Flexjsonを使用してJSON文字列を逆シリアル化して、 Android Appのオブジェクトモデルにマップしようとしています。このアプリケーションは、より多くのカタログ を持ついくつかのカタログを持つことができ、それらの文書を含むことができるいくつかのベンダーのライブラリの一種です。Java/AndroidでFlexjsonを使用してJSONObjectをリストにマッピングする
{
"library":{
"vendor":[
{
"id":146,
"title":"Vendor1",
"catalog":[
{
"id":847,
"document":[
{
"id":1628,
"title":"Document",
...
},
{
...
}
],
"title":"Catalog ",
},
{
...
}
]
},
{
...
}
]
}
}
したがって、各ベンダー、カタログ、文書はJSONObjectで表され、すべての子のカタログと文書がJSONArray内にあるさ:JSONは私が影響を及ぼさないと次のようになり、Webサービスから取得されます。 これまでのところ、すべてがFlexjsonと、次のデシリアライゼーションコードで正常に動作します:
LibraryResponse response = new JSONDeserializer<LibraryResponse>()
.use(Timestamp.class, new TimestampObjectFactory())
.deserialize(getLocalLibrary(), LibraryResponse.class);
return response.library;
私はList<Vendor>
を持つライブラリのオブジェクトを持っています。各ベンダーはList<Catalog>
とList<Document>
です。
残念ながら、カタログに単一のドキュメント が含まれている場合、またはカタログにカタログが1つしか含まれていない場合、WebサービスによってJSONArraysが単純なJSONObjectsに分解されます。だから、その場合のJSONは次のようになります。
"document":
{
"id":1628,
"title":"Document",
...
}
今Flexjsonはデシリアライズする方法を知っていないと私はlibrary.vendorX.getDocument()の代わりにList<Document>
のList<HashMap>
ことで終わります。 Flexjsonに明示的にそのようなケースの処理方法を伝えることが考えられますが、どこから始めたらいいか分かりません。別の方法は、最初のJSONを手動で解析し、そのようなJSONObjectを適切なJSONArrayに置き換えることです。しかし、私は、ライブラリがかなり深いことができるので、その方法は本当にいいとは思いません。
ここにいくつかのガイダンスを提供していただければ幸いです。
あなたの答えをありがとう!私は自分自身を明らかにしなかったと思いますが、私は常にリストを取得しますが、ドキュメントが1つしかない場合、Listに 'Documents'がありませんが、' HashMaps'は 'List'を 'catalog.document' 'List '。ハッシュマップオブジェクトには、ドキュメントに接続されたデータが含まれます。私には不思議そうだ。私はすでにドキュメントを持っているかどうかを判断するファクトリが必要か、ハッシュマップがあるかどうかを判断するファクトリが必要だと思います。後者の場合は、ドキュメントオブジェクトを手動でマップします。私の最初の試みは失敗しました。このアプローチは可能だと思いますか? –
私の答えがあなたの問題にどう答えなかったのか分かりません。リストの代わりにリスト
申し訳ありませんが、私はそこにあなたが間違っていると思います。とにかく、あなたがコード化しようとすると、 'ParameterizedType ptype =(ParameterizedType)targetType;で例外が発生します。' 'java.lang.ClassCastException:java.lang.Classはjava.lang.reflect.ParameterizedType'にキャストできません。もう1つの質問: 'library.vendor.values.catalog.values.document'で使用するFactoryを指定した場合、' library.vendor.values.document'として他のレベルに影響しませんか?ベンダーでさえドキュメントを持つことができるので...他のすべてのスーパークラスである 'LibraryItem.class'で使用するファクトリを指定することは可能でしょうか? –