从两级深度对象中提取值



我正在尝试从两级深度对象数据结构中检索一个特定值。不过,首先,我将保存到函数中的一个变量中,如下所示:

getTargetId() {
    if (this.authenticationService.isAuthenticated()) {
        const userInfo = sessionStorage.getItem('currentUser');
        console.log(userInfo);
    }
}

从:

console.log(userInfo);

我在控制台中得到了这个:

{"token":"sometoken.value","data":{"_id":"8cd0362c0", "phone":"555-4343"...}

我想做的是专门拉出这里的"_id"值。

我试过了:

控制台.log(userInfo.data._id(;

但是我的IDE向我显示了一个错误:

">

字符串"类型上不存在属性"_id"。

在这种情况下,我如何挖掘"_id"?

您访问错误
试试userInfo.data._id
在对象的日志中,您可以通过{}表示法看到data是另一个对象,因此在访问data后,您可以像访问任何其他对象一样访问其属性。

我也看到你正在得到

">

字符串"类型上不存在属性"_id"。

这可能意味着您从未解析过信息。要确定是否是这种情况,这应该是正确的:

跑步>

console.log(userInfo);

退货->

{"token":"sometoken.value","data":{"_id":"8cd0362c0", "phone":"555-4343"...}

就在这段代码之后:
跑步>

console.log(typeof userInfo);

退货->

"string"

通过您的编辑,我可以看到情况确实如此。
尝试:

userInfo = JSON.parse(sessionStorage.getItem('currentUser') );
console.log(userInfo.data._id);

_id 属性位于 data 键下:

const response = {
    "token":"sometoken.value",
    "data": {
       "_id":"8cd0362c0",
       "phone":"555-4343"
     }
};
console.log(response.data._id)

您还可以使用解构:

const { _id } = response.data;
console.log(_id)

或:

const { data: { _id }} = response;
console.log(_id);

因此,正如@jonsharpe指出的那样,关键是首先对字符串进行 JSON.parse。因此,这为我提供了"_id"所需的值:

getTargetId() {
    if (this.authenticationService.isAuthenticated()) {
        const userInfo = JSON.parse(sessionStorage.getItem('currentUser'));
        console.log(userInfo.data._id);
    }
}

实际上,您的字符串以 JSON 字符串的形式返回。因此,如果您使用的是js,则必须使用JSON.parse((将其解析为对象,如果您使用的是Jquery,则必须使用$.parseJSON((将其解析为对象。因此,更新后的代码现在如下所示。

var user ='{"token":"sometoken.value","data":{"_id":"8cd0362c0", "phone":"555-4343"}}';
var k = JSON.parse(user);
alert(k.data._id);

小提琴来了。谢谢

最新更新