无法从Json密钥获取值

时间:2017-12-28 05:35:45

标签: json node.js mongoose

我正在尝试从Mongoose获取一个对象但是当我得到它并尝试通过键访问Json对象来获取值时,我得到未定义。

User.find({name: 'auth'},function (err,obj) {

    var authCode = JSON.stringify(obj);
    console.log(authCode);
    var parse = JSON.parse(authCode);
    console.log(parse);
    console.log(parse.code);
});

我得到以下输出:

[{"_id":"5a43b491734d1d45eaf2d00d","name":"auth","code":"nCAxOSrUMqxtxd8T"}]
[ { _id: '5a43b491734d1d45eaf2d00d',
    name: 'auth',
    code: 'nCAxOSrUMqxtxd8T' } ]
undefined

我甚至试过console.log(parse['code']),我仍然得到undefined。有人可以帮助我吗

2 个答案:

答案 0 :(得分:1)

上面的

parse变量本身不是字典,而是包含字典的数组。你应该做什么来访问代码字段首先访问字典,然后得到代码字段,如;

parse[0].code

parse[0]['code']

答案 1 :(得分:0)

您无需解析或字符串化返回的JSON对象。您可以按原样使用JSON对象。
尝试以下方法

User.find({name: 'auth'},function (err,obj) {
    console.log(obj);
    console.log(obj.code);// this will probably be undefined as find method returns array of objects ( correct me if iam wrong)

    user.forEach(function(obj,index){
                console.log("index: "+index);
                console.log("obj: "+obj.code);
             });
});

使用promises是一种好方法

User.find({name: 'auth'})
        .then((user)=>{
             console.log("find success");
             console.log(user);
             console.log(user.code); // would return undefined as User.find will return array of objects

             user.forEach(function(obj,index){
                console.log("index: "+index);
                console.log("obj: "+obj.code);
             });
        })
        .catch(()=> {
            console.log("find failed");
        });