客户端生成的JSON存储在MongoDB服务器端,application / json不能正确parsing?

我会简短的; 我有一个客户端表单 ,允许创build“测验”,一系列附有答案的问题发送到服务器存储到MongoDB。 我试图按照W3的规范来做到这一点,但承诺的结果并不符合我得到的结果。

我想我的JSON由嵌套对象组成,如下所示:

{ "_id": "54a884c68999af900fc28dcb", "name": "testquiz", "author": "user", "questions": [ { "text": "question one", "answers": [ { "text": "answer one", "correct": false }, { "text": "answer two", "correct": true } ] }, { "text": "question two", "answers": [ { "text": "answer one", "correct": true }, { "text": "answer two", "correct": false } ] } ] } 

不过,我只能得到这样的结果:

  { "_id": "54a8b00108039068102f8835", "quizname": "World War II", "questions[0][text]": "When did WWII start?", "questions[0][answers][0][text]": "1938", "questions[0][answers][1][iscorrect]": "on", "questions[0][answers][1][text]": "1939", "questions[0][answers][2][text]": "1944", "questions[0][answers][3][text]": "1914", "questions[1][text]": "", "questions[1][answers][0][text]": "", "questions[1][answers][1][text]": "", "author": "user" } 

我究竟做错了什么? 我是一个新手到MEAN堆栈,任何帮助表示赞赏。

我想到了。 这让我感到尴尬的时间和一个痛苦的search量,但它的工作。

  $('#savequiz').click(function () { obj = { quizname: $('#quizname').val(), author: "", questions: [] }; for (var i = 0; i < questionCount; i++) { obj.questions.push({ text: $('#question_' + i).val(), answers: [] }); for (var j = 0; j < answerCount[i]; j++) { obj.questions[i].answers.push({ text: $('#question_' + i + '_answer_' + j + ' > div > input').val(), correct: $('#question_' + i + '_answer_' + j + ' > div > span > input[type="checkbox"]').is(':checked') }); } } $.ajax({ url: '/quiz/new', type: "POST", data: JSON.stringify(obj), processData: false, contentType: "application/json; charset=UTF-8" }); return false; }); 

我相信解决scheme体现在$ .ajax调用参数'processData: false'这仍然不能回答我的好奇心,为什么W3的application/json表单提交规范没有工作规范,但至less我知道了工作,并张贴这个,希望能帮助别人遇到同样的问题。 自从我遇到如此简单的事情已经有一段时间了,事实certificate这很耗时。

如果它有任何相关性或兴趣,这是我如何处理请求:

 app.post('/quiz/new', function (req, res, next) { if (!req.session.loggedin) { res.status(401).end(); return; } var quiz = req.body; quiz.author = req.session.username; db.collection('quiz', function (err, collection) { collection.insert(quiz, {safe: true}, function (err, result) { if (err) { console.log('Failed to persist quiz!'); res.send({'error': 'An error has occurred'}); return; } console.log("Successfully persisted quiz."); res.redirect('/'); }); });