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