Reputation: 879
Hello Can you help me to filter such Json Object:
{
"data": {
"statuses": [{
"entities": {
"urls": [],
"user_mentions": [{
"screen_name": "name1"
}]
},
"entities": {
"urls": [],
"user_mentions": [{
"screen_name": "name2"
}]
},
"entities": {
"urls": [],
"user_mentions": [{
"screen_name": "name3"
}]
}
}]
}
}
I need to get array with values of each key screen_name.
For example: array = ["name1","name2","name3"]
How i can do it without frameworks with only JS?
Thanks for your help. I have updated Json to such like this:
var obj = {
"data": {
"statuses": [{
"urls": [],
"user_mentions": [{
"indices": [
3,
16
],
"id_str": "626444770",
"id": 626444770,
"name": "katheryn",
"screen_name": "sella_sandra"
}, {
"indices": [
"***",
"***"
],
"id_str": "21447363",
"id": 21447363,
"name": "KATY PERRY",
"screen_name": "katyperry"
}, {
"indices": [
"***",
"***"
],
"id_str": "21447363",
"id": 21447363,
"name": "KATY PERRY",
"screen_name": "floyd"
}]
}]
}
I'm wanna to get array of screen_names.I wrote such code.But when i use for.It doesn't work here:
console.log (statuses[0].user_mentions[i].screen_name)
I't silly mistake but I cannot find out how correct that. Help guys!
var statuses = obj.data.statuses;
for (var i=0; i<statuses.length; i++ )
{ if ( typeof statuses[0].user_mentions !== "undefined")
{
for (var i=0; i<statuses.length; i++){
console.log (statuses[0].user_mentions[i].screen_name);
}
}
else console.log ="No senders";
}
Upvotes: 0
Views: 81
Reputation: 21475
Given your updated data object, this returns an array of screen_names (with any duplicates removed. If you want to keep duplicates, declare names
as an array and push to it instead.) I used a relatively verbose coding style to make it easier to see what's going on.
var obj = {
"data": {
"statuses": [{
"urls": [],
"user_mentions": [{
"indices": [3,16],
"id_str": "626444770",
"id": 626444770,
"name": "katheryn",
"screen_name": "sella_sandra"
}, {
"indices": ["***","***"],
"id_str": "21447363",
"id": 21447363,
"name": "KATY PERRY",
"screen_name": "katyperry"
}, {
"indices": ["***","***"],
"id_str": "21447363",
"id": 21447363,
"name": "KATY PERRY",
"screen_name": "floyd"
}]
}]
}
};
var names = {};
for (var i=0; i<obj.data.statuses.length; i++) {
if (obj.data.statuses[i]["user_mentions"]) {
var mentions = obj.data.statuses[i]["user_mentions"];
for (var j=0; j<mentions.length;j++) {
if (mentions[j]["screen_name"]) {
names[mentions[j]["screen_name"]] = 1;
}
}
}
}
var arrayOfScreenNames = Object.keys(names);
console.log(arrayOfScreenNames);
Upvotes: 0
Reputation: 68373
Your syntax is incorrect, since inside statuses
array you cannot have another key value data.
Removing the entities
key name assuming that it is simply an array of objects then try this
var obj = { "data": {
"statuses": [
{
"urls": [],
"user_mentions": [{
"screen_name": "name1"
}]
},
{
"urls": [],
"user_mentions": [{
"screen_name": "name2"
}]
},
{
"urls": [],
"user_mentions": [{
"screen_name": "name3"
}]
}
]
} };
var statuses = obj.data.statuses;
var names = [];
for (var counter = 0; counter < statuses.length; counter++ )
{
names.push( statuses[ counter ].user_mentions[0].screen_name );
}
console.log( names );
Upvotes: 2