我正在尝试从两级深度对象数据结构中检索一个特定值。不过,首先,我将保存到函数中的一个变量中,如下所示:
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);
小提琴来了。谢谢