异步存储检索项目中键的值

问题描述

我是 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 中,以确保在尝试解析无效数据并引发错误时捕获错误。