Search code examples
javascriptarraysjsonobjectnested

How to access members of a nested object?


I have been trying to access the elements of a nested object but still have no success. I searched through existing similar questions on stackexchange (eg: this) but could not resolve my issue. I tried to access the final element using console.log(result.final) but it shows undefined in the console. Kindly advise.

var data = '{"response":{"valid":true,"final":{"message":" MS02","tags":{"d1":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9","d2":"JhbGciOiJIUzI1NiJ9eyJ0eXAiOiJKV1QiLC","d3":"dupb9WWT8ypQYWw6QblkM98xFBBRsamkkWLw","d5":"5EChV1KJ4ASeh9crZDR3fivnSz4wCDmCr2RSC0CUrkx","d6":"hiH1I1SI3NHCYZeva0_FrjgSgxOa_YW6ECxRdAY-w5w","ua":"y"},"ti":"","op":[]}}}';
var dataJson = JSON.parse(data);
var result = [];

result = Object.entries(dataJson).map(([key, value]) => ({ [key]: value }))
console.log(result)
console.log(result.final)

UPDATE
I used typeof on dataJson and it showed it as a string so I did JSON.parse one more time on dataJson and then checked again with typeof which showed object and now after double JSON.parse I was able to access the nested values with dot operator (result.final), without mapping.


Solution

  • You have been given multiple answers that work just fine based on the code that you've provided. Like I said in a comment earlier, you don't need to map the data to an array first before accessing its data.

    var data = '{"response":{"valid":true,"final":{"message":" MS02","tags":{"d1":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9","d2":"JhbGciOiJIUzI1NiJ9eyJ0eXAiOiJKV1QiLC","d3":"dupb9WWT8ypQYWw6QblkM98xFBBRsamkkWLw","d5":"5EChV1KJ4ASeh9crZDR3fivnSz4wCDmCr2RSC0CUrkx","d6":"hiH1I1SI3NHCYZeva0_FrjgSgxOa_YW6ECxRdAY-w5w","ua":"y"},"ti":"","op":[]}}}';
    var dataJson = JSON.parse(data);
    console.log(dataJson.response.final);

    If this doesn't work for you, then the information you've given might be incorrect or incomplete. Please provide for us a minimal reproducible example that clearly demonstrates the issue you're having.