Sebastian
Sebastian

Reputation: 796

Filtering JSON response

I have a response from an xhr that looks like this:

{
    "9994921432": {
        "name": "name 1",
        "ownerid": "543624"
    },
    "9979509360": {
        "name": "some name",
        "ownerid": "765875"
    },
    "9979524523": {
        "name": "some other name",
        "ownerid": "215654"
    },
    "9979524523": {
        "name": "some name",
        "ownerid": "65893"
    }
}

And im trying to filter it based on the value of "name", if possible with a "one-liner" (and I can't use jQuery). I am testing something like this:

var response = '{ "9994921432": { "name": "the name", "ownerid": "543624" }, "9979509360": { "name": "some name", "ownerid": "765875" }, "9979524523": { "name": "some name", "ownerid": "215654" }, "9979524523": { "name": "some other name", "ownerid": "65893" } }';
var json = JSON.parse( '[' + response + ']' );
var filtered = json.filter( function ( item ) { return item.name == 'some name' } );
console.log( filtered );

But filtered is empty.

How can I get an object like json but containing only the objects which name == "some name"?

Upvotes: 0

Views: 11825

Answers (2)

Harish Kommuri
Harish Kommuri

Reputation: 2854

Try as follows. You have to loop through object and not an array.

var response = '{ "9994921432": { "name": "the name", "ownerid": "543624" }, "9979509360": { "name": "some name", "ownerid": "765875" }, "9979524523": { "name": "some name", "ownerid": "215654" }, "9979524524": { "name": "some other name", "ownerid": "65893" } }';
var json = [];
var resObj = JSON.parse(response);
for(var key in resObj) {
  if(resObj[key].name == 'some name') {
    json.push(resObj[key]);
  }
}

console.log(json);

Upvotes: 1

Sebastian
Sebastian

Reputation: 796

Solved it using this code:

var response = '{ "9994921432": { "name": "the name", "ownerid": "543624" }, "9979509360": { "name": "some name", "ownerid": "765875" }, "9979524523": { "name": "some name", "ownerid": "215654" }, "45756745675": { "name": "some name", "ownerid": "65893" } }';

var json = JSON.parse( response );
var filtered = {};

Object.keys( json ).forEach( function( key ) {
    if( json[key].name == "some name" ) {
        filtered[key] = json[key];
    }
});

console.log( filtered );

Not the one-liner I wanted but does the job.

Upvotes: 0

Related Questions