问题描述
我是 Javascript 的新手并且对本机做出反应,问题本身可能很容易回答。
我正在设置一个 AsyncStorage 并在存储中创建一个 Item,它是一个 .JSON,其中包含 3 个键值。
const saveDataToStorage = (token,userId,expirationDate) => {
AsyncStorage.setItem('userData',JSON.stringify({
token: token,userId: userId,expiryDate: expirationDate.toISOString()
}))
};
我现在想要做的是从项目的其他部分中的此项中检索“userId”值,但问题就在这里。
var PersonalId = await AsyncStorage.getItem('userData');
console.log(PersonalId);
console.log(typeof PersonalId);
我知道如何访问项目本身,但我不知道如何访问其中的特殊密钥。我无法使用命令:
var PersonalId = await AsyncStorage.getItem('userData').userId;
因为来自 AsyncStorage 的项目是一个字符串,我知道这一点是因为我从代码的第二行中得到了这个信息。
console.log(typeof PersonalId);
如何访问我的项目“userData”中的特殊键“userId”而不是整个项目本身?无论如何,我无法使用该项目,因为它是一个字符串,我不能将其视为一个对象,这就是我的问题。
感谢您的阅读和帮助!
解决方法
您需要首先使用 JSON.parse()
将从 AsyncStorage 获取的值解析为 JSON 对象。试试这个实现。
const get_data = async () => {
const userData = await AsyncStorage.getItem("userData");
const userObject = userData !== null ? JSON.parse(userData) : {};
const personalId = userObject.userId;
console.log(personalId);
};
,
您忘记了在将 JSON 保存到存储之前对其进行了字符串化......因此您在阅读它时会得到字符串。只需 JSON.parse
返回的字符串,您就应该在路上了。
const userData = await AsyncStorage.getItem('userData');
const personalId = JSON.parse(userData).userId;
您还应该将上述代码包装在 try-catch 中,以确保在尝试解析无效数据并引发错误时捕获错误。