ION
ION

Reputation: 13

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

Upvotes: 0

Views: 57

Answers (1)

Drew Reese
Drew Reese

Reputation: 202864

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"
    }
}

Upvotes: 0

Related Questions