Search code examples
jsontypescriptreact-native

Field from parsed JSON undefined when console.log returning true value


Async Storage returns an item from storage as a string. Next, the string is parsed to an object. When trying to get data from the object, an undefined error is returned.

const storage: any = await AsyncStorage.getItem('persist:root');

const state = JSON.parse(storage!);
console.log(state);

const a = JSON.parse(JSON.stringify(state.auth));
console.log(a); <- Normal JSON with fields "user" and "token'
console.log(a.user); <- undefined
console.log(a.token); <- undefined

const refreshToken = a.token.refreshToken; <- undefined

Variable state.auth JSON looks like this:

{
  "user":{
},
  "token":{
    "refreshToken":"REFRESH",
    "accessToken":"ACCESS"
  }
}

LOG {"_persist": "{"version":-1,"rehydrated":true}", "auth": "{"user":{"user_id":19,"email":"[email protected]","approved":false,"createdAt":"2024-01-11T07:42:33.762Z","updatedAt":"2024-01-11T07:42:33.762Z","role":{"role_id":1,"role_name":"Пользователь","createdAt":"2024-01-10T12:42:21.257Z","updatedAt":"2024-01-10T12:42:21.257Z"},"organization":{"organization_id":3,"organization_type_id":1,"organization_name":"ООО \"Компания 4\"","full_name":"ООО \"Компания 4\"","short_name":"Компания 4","register_number":"212122134","bic":"251490211","phone":"+79354944154","address":"883072, Курганская область, город Чехов, спуск Будапештсткая, 77","email":"[email protected]","ogrn":"6927890723831","inn":"0436981520","kpp":"183212273","okpo":"50235599","createdAt":"2024-01-10T12:42:23.354Z","updatedAt":"2024-01-10T12:42:23.354Z"},"person":{"person_id":19,"last_name":"Ivanov","first_name":"Ivan","patronymic":"Ivanovi3","gender":"Мужской","phone":"+79001234568","createdAt":"2024-01-11T07:42:33.760Z","updatedAt":"2024-01-11T07:42:33.760Z"},"group":null},"token":{"refreshToken":"REFRESH","accessToken":"ACCESS"}}"} LOG {"user":{"user_id":19,"email":"[email protected]","approved":false,"createdAt":"2024-01-11T07:42:33.762Z","updatedAt":"2024-01-11T07:42:33.762Z","role":{"role_id":1,"role_name":"Пользователь","createdAt":"2024-01-10T12:42:21.257Z","updatedAt":"2024-01-10T12:42:21.257Z"},"organization":{"organization_id":3,"organization_type_id":1,"organization_name":"ООО "Компания 4"","full_name":"ООО "Компания 4"","short_name":"Компания 4","register_number":"212122134","bic":"251490211","phone":"+79354944154","address":"883072, Курганская область, город Чехов, спуск Будапештсткая, 77","email":"[email protected]","ogrn":"6927890723831","inn":"0436981520","kpp":"183212273","okpo":"50235599","createdAt":"2024-01-10T12:42:23.354Z","updatedAt":"2024-01-10T12:42:23.354Z"},"person":{"person_id":19,"last_name":"Ivanov","first_name":"Ivan","patronymic":"Ivanovi3","gender":"Мужской","phone":"+79001234568","createdAt":"2024-01-11T07:42:33.760Z","updatedAt":"2024-01-11T07:42:33.760Z"},"group":null},"token":{"refreshToken":"REFRESH","accessToken":"ACCESS"}} LOG undefined LOG undefined


Solution

  • state is the parsed storage JSON string. It's an object with "_persist", "auth" and "token" keys. From here state.auth and state.token hold stringified JSON data, so these need to be parsed. Don't stringify and parse these values. Doing so will result in the same original single-stringified value. Just parse them.

    const storage: any = await AsyncStorage.getItem('persist:root');
    
    const state = JSON.parse(storage!);
    console.log(state);
    
    const a = JSON.parse(state.auth);
    console.log(a); <- Normal JSON with fields "user" and "token'
    console.log(a.user); <-- defined
    console.log(a.token); <-- defined
    
    const refreshToken = a.token.refreshToken; <-- "REFRESH"
    
    {
        "user": {
            "user_id": 19,
            "email": "[email protected]",
            "approved": false,
            "createdAt": "2024-01-11T07:42:33.762Z",
            "updatedAt": "2024-01-11T07:42:33.762Z",
            "role": {
                "role_id": 1,
                "role_name": "Пользователь",
                "createdAt": "2024-01-10T12:42:21.257Z",
                "updatedAt": "2024-01-10T12:42:21.257Z"
            },
            "organization": {
                "organization_id": 3,
                "organization_type_id": 1,
                "organization_name": "ООО \"Компания 4\"",
                "full_name": "ООО \"Компания 4\"",
                "short_name": "Компания 4",
                "register_number": "212122134",
                "bic": "251490211",
                "phone": "+79354944154",
                "address": "883072, Курганская область, город Чехов, спуск Будапештсткая, 77",
                "email": "[email protected]",
                "ogrn": "6927890723831",
                "inn": "0436981520",
                "kpp": "183212273",
                "okpo": "50235599",
                "createdAt": "2024-01-10T12:42:23.354Z",
                "updatedAt": "2024-01-10T12:42:23.354Z"
            },
            "person": {
                "person_id": 19,
                "last_name": "Ivanov",
                "first_name": "Ivan",
                "patronymic": "Ivanovi3",
                "gender": "Мужской",
                "phone": "+79001234568",
                "createdAt": "2024-01-11T07:42:33.760Z",
                "updatedAt": "2024-01-11T07:42:33.760Z"
            },
            "group": null
        },
        "token": {
            "refreshToken": "REFRESH",
            "accessToken": "ACCESS"
        }
    }