I'm having a hard time understanding objects and the Object.entries()
method on complicated objects that come from third parties, specifically, DataDog.
I want a specific metric and I'm not sure how to get to it. I marked it "data_I_want" with a value of "HERE".
Based on what I understand from this API, that function returns an object. An example of the structure looks like this:
{
"data": [
"attributes": {
"attributes": {
"view": {
"data_I_want": "HERE"
}
}
}
],
"links": {
"next": "stuff"
},
"meta": {
"page": {
"after": "stuff"
}
}
}
The code that gets it is this
RUMApiInstance
.searchRUMEvents(RUMApiParams)
.then((data: v2.RUMEventsResponse) => {
let ddDataViews = data;
// where I'm stuck/confused
Object.entries(ddDataViews).forEach(([key, value]) =>
console.log('values: ' + `${key}: ${value}`)
);
})
.catch((error: any) => console.error(error));
How can I access and process nested objects, arrays or JSON?
So there's a really long answer but the first thing I tried was basically this, from the answer:
You can access it this way
data.items[1].name
or
data["items"][1]["name"]
Both ways are equal.
When I try this in my context:
let ddDataViews = data.attributes[0].attributes.view.data_I_want;
I get an error from VS Code in typescript:
Property 'attributes' does not exist on type 'RUMEventsResponse'.ts(2339)
Why?
I do notice in the linked answer, that the object is a variable and mine is not? Do you have to like, declare it as a variable for that method to work?
So I move on to try to use the Object.entries() method
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries
The Object.entries() method returns an array of a given object's own enumerable string-keyed property [key, value] pairs. This is the same as iterating with a for...in loop, except that a for...in loop enumerates properties in the prototype chain as well.
So this seems like it's the right direction.
So my logic is as follows:
- get the entries of the object
- if its data, then loop over that object
- inside that object, loop over that object
So this is what I thought up:
Object.entries(ddDataViews).forEach(([key, value]) =>
if (key == data) {
console.log('values: ' + `${value}`)
}
);
However, this code doesn't work I get:
'{' expected.ts(1005)
I'm beyond confused as to how objects work in typescript with third party APIs, how do I get "data_I_want" with typescript/Object.entries() from an API?