Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在MongoDB中存储多个JSON文档(采用嵌套JSON键值对象的行数组格式)_Java_Json_Mongodb_Bson - Fatal编程技术网

Java 在MongoDB中存储多个JSON文档(采用嵌套JSON键值对象的行数组格式)

Java 在MongoDB中存储多个JSON文档(采用嵌套JSON键值对象的行数组格式),java,json,mongodb,bson,Java,Json,Mongodb,Bson,我有一个json文件,其中每一行看起来像: [1, "A", "B", 10, "{\"key\":\"val"}"] 如何使用JAVA驱动程序api或其他方式导入文件 使用以下功能: public static void importJSONFileToDBUsingJavaDriver(String pathToFile, DB db, String collectionName) { // open file FileInputStream fstream = null;

我有一个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);
):

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

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

如果有人能让我参考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);

它在哪一条线上失败了?MongoDBFunctions.convertJSONStringToBSON是什么?问题可能在那里。是的,对不起。我已经编辑了问题和异常的来源。谢谢。但是,什么是JSONArray,JSONObject?我在MongoDB的JAVA驱动程序API中找不到它。@user1264304您可以从
exception:BSON representation of supplied JSON is too large: code FailedToParse: FailedToParse: Expecting '{': offset:0
    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);