Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 异步存储检索项中键的值_Javascript_Reactjs_React Native_Asyncstorage - Fatal编程技术网

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

Javascript 异步存储检索项中键的值,javascript,reactjs,react-native,asyncstorage,Javascript,Reactjs,React Native,Asyncstorage,我是Javascript新手,并且是本地人,这个问题本身可能很容易回答 我正在设置一个异步存储并在存储中创建一个项,它是一个.JSON,有3个键值 const saveDataToStorage = (token, userId, expirationDate) => { AsyncStorage.setItem('userData', JSON.stringify({ token: token, userId: userId, expiryDate: ex

我是Javascript新手,并且是本地人,这个问题本身可能很容易回答

我正在设置一个异步存储并在存储中创建一个项,它是一个.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()
将从异步存储中获取的值解析为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
返回的字符串,您就可以上路了

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

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

您忘记了在将JSON保存到存储之前对其进行了字符串化。。所以当你们读它的时候,你们得到了字符串。只需
JSON.parse
返回的字符串,您就可以上路了。@rahulpsd18您的答案是我解决问题的关键。如果你把这个评论作为一个答案,我会给你一个绿色的钩子!这不会是一个问题,只是在代码的其他部分中,我需要整个数据集,它是一个字符串。只有在这种特殊情况下,我才需要将其“转换”为对象,但您的回答对我有所帮助,因为我理解了JSON.parse(),并且通过它,我能够将字符串转换为对象并正确读取键值!我很高兴,谢谢