【问题标题】:Async Storage retrieve value of key in item异步存储检索项中键的值
【发布时间】:2021-01-19 19:14:35
【问题描述】:

我是 Javascript 的新手,并且反应原生,问题本身可能很容易回答。

我正在设置一个 AsyncStorage 并在存储中创建一个 Item,它是一个具有 3 个键值的 .JSON。

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 保存到存储之前对它进行了字符串化。所以当您阅读它时会得到字符串。只需JSON.parse 返回的字符串,您就应该在路上了。
  • @rahulpsd18 您的回答是我解决方案的关键。如果您将此评论作为答案发布,我会给您绿色的钩子!

标签: javascript reactjs react-native asyncstorage


【解决方案1】:

您需要首先使用 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.parse() 并且我能够将字符串转换为对象并正确读出关键价值!
【解决方案2】:

您忘记了在将 JSON 保存到存储之前对它进行了字符串化。所以当您阅读它时会得到字符串。只需 JSON.parse 返回的字符串,您就可以上路了。

const userData = await AsyncStorage.getItem('userData');
const personalId = JSON.parse(userData).userId;

您还应该将上述代码包装在 try-catch 中,以确保在尝试解析无效数据并引发错误时捕获错误。

【讨论】:

    猜你喜欢
    • 2021-03-27
    • 2012-06-18
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    相关资源
    最近更新 更多