Mongo使用嵌套数组元素插入json doc

时间:2015-08-05 08:15:19

标签: java mongodb

我有一个嵌套数组元素的json文档。但是当我将文档添加到我的mongo db时,我只使用以下代码编写最后一个数组:

    mongoColl = mongoDatabase.getCollection("coll"); 
    DBObject dbo = (DBObject)JSON.parse(myJsonString);
    mongoColl.insert(dbo);

    dbObject = mongoColl.findOne();

    String s = JSON.serialize(dbObject);
    JSONObject json = null;
    try 
    {
         json = new JSONObject(s);
         System.out.println(json.toString(4));
    } 
    catch (JSONException e1) 
    {
        e1.printStackTrace();
    }

我很困惑,因为没有例外,我是谁在json文档中正确插入了所有数组元素?

编辑我尝试了几种方法,并输出相同的结果(我的json文档中的最后一个数组元素)

这是我的json文档:My JSON doc

        // Method 2
        Object jsonObj = s; 
        Object o = com.mongodb.util.JSON.parse(jsonObj.toString());
        DBObject dbObj = (DBObject) o;
        WriteResult result = mongoColl.insert(dbObj);
        System.out.println("Write Result: " + result);

        // Method 3
        JSONArray jsonArray = new JSONArray(s);
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("GameofThrones", jsonArray);
        DBObject bson = (DBObject) JSON.parse(jsonObject.toString());
        WriteResult result = mongoColl.insert(bson);
        System.out.println("Write Result: " + result);

结果如下:Result

1 个答案:

答案 0 :(得分:1)

此处的问题是您的JSON无效。这里的问题是你重复相同的问题"数组元素在同一文档中反复出现,即:

{
    "show":[
        {
            "season":[
                {
                    "questions":[
                        { ... } // lots of questions entries
                    ],
                    "questions": [     // It's the same key!
                    ]
                }
            ]
        }
    ]
}

折叠编辑器截图,以便您可以看到以下行:

Collapsed Structure in Editor

这就是JSON的工作原理。每个对象只能有一次键,所以这里发生的所有事情都是每个块读取和解析只是一遍又一遍地替换元素,直到结束。

你应该拥有什么:

{
    "show":[
        {
            "season":[
                {
                    "questions":[
                        { ... } // lots of questions entries
                    ]
                },              // <-- End element here
                {               // <-- New element here
                    "questions": [    
                    ]
                }
            ]
        }
    ]
}

所以发生的事情是你用来编写这个列表的任何进程都明显有问题,并且没有用它应该完成的字符串格式分离对象。

更正正在编写此内容的来源,或者查看处理和编辑文本内容的方法。

不是解析器的错(对于任何语言中的任何解析器,我都会发生同样的事情)但是数据的错误。