使用Node.js接收嵌套的JSON对象

时间:2014-10-12 20:22:44

标签: javascript json node.js mongodb

我无法将嵌套的JSON对象发布到node.js服务器。

这是对象应该是什么样子:

{
    "name" : "Plan 1", 
    "schedule": [
        {
            "start": 0, 
            "days": [
                {
                    "title" : "Day1"
                }
            ]
        }
    ]
}

这是我的server.js代码

router.route('/plans')
    .post(function(req, res) {

        console.log(JSON.stringify(req.body));

        var plan = new Plan();  
        plan.name = req.body.name;
        plan.tagline = req.body.tagline;
        plan.duration = req.body.duration;
        plan.schedule = req.body.schedule;

        plan.save(function(err) {
            if (err)
                res.send(err);
            res.send(plan);
        });
})

和一些python代码来发出请求。 (我尝试过使用Postman和curl并得到相同的结果)

import requests
payload = {"name" : "Plan 1", "schedule": [{"start": 0, "days": [{"title" : "Day1"}]}]}
r = requests.post("http://localhost:5000/plans", data=payload)
print(r.text)

这是server.js为JSON.stringify(req.body)

输出的内容
{"name" : "Plan 1", "schedule" : ["start", "days"]}

然后没有任何实际保存,所以print(r.text)输出:

{}

这样做的正确方法是什么?如果相关,我使用MongoDB进行存储,但看起来我的server.js甚至没有正确接收完整的JSON。

1 个答案:

答案 0 :(得分:1)

来自Python请求文档:http://docs.python-requests.org/en/latest/user/quickstart/#custom-headers

>>> import json
>>> url = 'https://api.github.com/some/endpoint'
>>> payload = {'some': 'data'}
>>> headers = {'content-type': 'application/json'}

>>> r = requests.post(url, data=json.dumps(payload), headers=headers)

这对我有用。感谢