2016-05-30 5 views
1

以前のバージョンのJavaドライバでは、JSON.parseはJson StringをBasicDBObjectまたはBasicDBListに解析するために使用されていました。しかし、新しいJavaドライバでは、BasicDBObjectはDocumentに移動され、BasicDBListはArrayListに移動されます。 Document.parseはJson StringをDocumentに解析するために使用できますが、Json String配列をArrayListに解析するのに相当するものは見つかりませんでした。 JSON.parseは、ArrayListの代わりにBasicDBListを返します。したがって、ArrayListは、個々の要素をDocumentにキャストできないため、クラッシュします。MongoDB Javaドライバ3.2:Json StringをArrayListに構文解析<Document>

問題はここに型キャストされていません。 JSON.parseは、ArrayListがスーパークラスであるため、ArrayListへの型キャスト時にBasicDBListのままになるBasicDBListを返します。問題は、jsonの文字列配列をArrayListに解析し、おそらくよりコーデックがないことです(BasicDBObjectのコーデックがありますが、BasicDBListのコーデックはありません)。これのための任意の作業/標準的な解決策はありますか?

マイコードスニペット:

ArrayList<Document> category = (ArrayList<Document>) JSON.parse(((requestBody.getArgumentByKey("category")).toString())); 

これはでクラッシュし、次のメッセージを表示して

((Document) category.get(0)) 

java.lang.ClassCastException: com.mongodb.BasicDBObject cannot be cast to org.bson.Document 

答えて

0

JSON.parse()は、より良い用語の欠如のために、従来のタイプを返します。 。 List<DBObject>が返されます。 DBObjectDocumentではなく、そのようにキャストできません。 JSON.parse()を使用するには、DBObjectを引き続き使用するか、DocumentのコンストラクタにDBObjectを渡します。このコンストラクタのサイズはMapです。

+0

はい、うまくいきます。しかし、私はDBObjectを使用し続けたいとは思わず、新しい推奨ドキュメントに移行してください。ですから、基本的にはArrayList のJSON.parse()を探しています。 Document.parse()がDocumentと同等のJSON.parse()であるのと同様です。 –