gpt4 book ai didi

java - 在 MongoDB 中存储多个 JSON 文档(具有嵌套 JSON 键值对象的行数组格式)

转载 作者:行者123 更新时间:2023-11-30 04:11:10 25 4
gpt4 key购买 nike

我有 json 文件,其中每一行如下所示:

[1, "A", "B", 10, "{\"key\":\"val"}"]

如何使用JAVA驱动api或其他方式导入文件?

使用以下函数:

public static void importJSONFileToDBUsingJavaDriver(String pathToFile, DB db, String collectionName) {
// open file
FileInputStream fstream = null;
try {
fstream = new FileInputStream(pathToFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("file not exist, exiting");
return;
}
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));

// read it line by line
String strLine;
DBCollection newColl = db.getCollection(collectionName);
try {
while ((strLine = br.readLine()) != null) {
// convert line by line to BSON
DBObject bson = (DBObject) JSON.parse(JSONstr);
// insert BSONs to database
try {
newColl.insert(bson);
}
catch (MongoException e) {
// duplicate key
e.printStackTrace();
}


}
br.close();
} catch (IOException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}


}

导致以下错误(在线newColl.insert(bson);):

java.lang.IllegalArgumentException: BasicBSONList can only work with numeric keys, not: [_id]
at org.bson.types.BasicBSONList._getInt(BasicBSONList.java:161)
at org.bson.types.BasicBSONList._getInt(BasicBSONList.java:152)
at org.bson.types.BasicBSONList.get(BasicBSONList.java:104)
at com.mongodb.DBCollection.apply(DBCollection.java:766)
at com.mongodb.DBCollection.apply(DBCollection.java:755)
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:242)
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:226)
at com.mongodb.DBCollection.insert(DBCollection.java:75)
at com.mongodb.DBCollection.insert(DBCollection.java:59)
at com.mongodb.DBCollection.insert(DBCollection.java:104)

尝试使用 mongoimport.exe 实用程序:

mongoimport --db db --collection dbColl  < rows.js

结果:

exception:BSON representation of supplied JSON is too large: code FailedToParse: FailedToParse: Expecting '{': offset:0

如果有人可以向我推荐 MongoDB 可接受的 JSON 格式规范,我会很高兴。 (我的意思是它可以转换为 BSON,然后可以从中构建 DBObject,并且可以将该对象插入到 MongoDB 集合中)

最佳答案

您正在尝试从字符串创建一个 DBObject,它实际上是一个数组,因此您无法直接使用 JSON.parse(JSONstr) 对其进行类型转换。因此,您必须首先将字符串转换为对象,然后插入它。

    String JSONstr = "[1, \"A\", \"B\", 10,{\"key\":\"val\"}]";
JSONArray jsonArray = new JSONArray(JSONstr);
JSONObject jsonObject = new JSONObject();
jsonObject.put("data", jsonArray);
DBObject bson = (DBObject) JSON.parse(jsonObject.toString());
WriteResult insert = newColl.insert(bson);

关于java - 在 MongoDB 中存储多个 JSON 文档(具有嵌套 JSON 键值对象的行数组格式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19568380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com