JSON嵌套对象使用node.js

时间:2015-04-25 03:57:36

标签: javascript json node.js express

我有一个接收此JSON对象的node.js服务器作为put:

{
     stats = {
          abdominal=0,
          bicep=0,
          deltoids=0,
          erector_spinae=0,
          gastro_soleus=0,
          gluteus=0,
          hamstrings=0,
          lat_dor_rhom=0,
          obliques=0,
          pectoralis=0,
          quadriceps=0,
          trapezius=0,
          triceps=0
     },
     name=Name,
     _id=userid,
     level=1,
     experience=200
}

我使用这段代码来尝试访问数据:

user.name = req.body.name;
user.level = req.body.level;
user.experience = req.body.experience;

user.stats = {
     abdominal: req.body.stats["abdominal"],
     bicep: req.body.stats["bicep"],
     deltoids: req.body.stats["deltoids"],
     erector_spinae: req.body.stats["erector_spinae"],
     gastro_soleus: req.body.stats["gastro_soleus"],
     gluteus: req.body.stats["gluteus"],
     hamstrings: req.body.stats["hamstrings"],
     lat_dor_rhom: req.body.stats["lat_dor_rhom"],
     obliques: req.body.stats["obliques"],
     pectoralis: req.body.stats["pectoralis"],
     quadriceps: req.body.stats["quadriceps"],
     trapezius: req.body.stats["trapezius"],
     triceps: req.body.stats["triceps"]
};

名称,级别和体验值更新得很好,但访问stats对象的成员似乎不起作用。当我做一个简单的console.log(req.body["stats"]["abdominal"]);时,我得到一个undefinedconsole.log(req.body["stats"]);确实有效,并打印出整个对象。有关访问这些变量的原因的任何想法都没有用?

2 个答案:

答案 0 :(得分:0)

嗯,我没有解决问题,但我认为拥有一个嵌套对象真的没什么好处,所以我只是把它做成了一层。这解决了我遇到的问题。

答案 1 :(得分:0)

我有同样的问题。事实证明我没有使用正确的ContentType(我的客户端代码是发布application / x-www-form-urlencoded)...所以,表单正文解析器正在解析内容。

切换到发布正确的内容(例如json)包括正确的ContentType标头(例如Content-Type:application / json)修复了包含正如您所描述的属性的问题(注意:如果你使用类似jquery的东西,指定ContentType选项将同时为你做这两件事。)

然而,值得注意的是,我仍然遇到嵌套在另一个对象中的对象的问题(数组中嵌套的对象似乎工作正常)。

e.g。客户发送:

`

{
    "someObj": {
        "someChild": {
            "someProp": "0"
        }
    },
    "someChild": {
        "someProp": "0"
    }
}

`

服务器解析 `

{
    "someObj": {
        "someChild": { }
    },
    "someChild": {
        "someProp": "0"
    }
}

`