Dexter
Dexter

Reputation: 528

how to get data from dynamic key pair value in Angular

here my issue i unable to get the dynamic key pair value from the dynamic json below is my json

var d =   {
      "pexels-photo.jpeg": {
        "information": "laptop",
        "desc": {
          "mimetype": "image/jpeg",
          "id": "shsj44",
          "file_id": "pexels-photo.jpeg"
        },
        "_id": "shsj44"
      }
    }

here i tried below

Object.keys(d).forEach(function(key){
    var value = d[key];
     console.log(key + ':' + value) ;
});

i want to get the id value "_id" & "file_id" values

Upvotes: 0

Views: 2408

Answers (4)

Rohìt Jíndal
Rohìt Jíndal

Reputation: 27192

Try this :

var d = {
      "pexels-photo.jpeg": {
        "information": "laptop",
        "desc": {
          "mimetype": "image/jpeg",
          "id": "shsj44",
          "file_id": "pexels-photo.jpeg"
        },
        "_id": "shsj44"
      }
    };
    
Object.keys(d).filter(key => {
    	Object.keys(d[key]).filter(item => {
        if (item === 'desc') {
        	Object.keys(d[key][item]).filter(elem => {
            if ((elem === 'id') || (elem === 'file_id')) {
              console.log(elem + ' : ' + d[key][item][elem]);
            }
          });
        }
      })
});

Upvotes: 1

Taher
Taher

Reputation: 258

You need to check whether the value is object or not, if yes then you need to loop over it again.

Following code will print every key-value pair in d

export class AppComponent implements OnInit {
  d = {
    'pexels-photo.jpeg': {
      'information': 'laptop',
      'desc': {
        'mimetype': 'image/jpeg',
        'id': 'shsj44',
        'file_id': 'pexels-photo.jpeg'
      },
      '_id': 'shsj44'
    }
  };

  ngOnInit(): void {
    this.calc(this.d);
  }

  calc(val) {
    Object.keys(val).forEach(key => {
      const value = val[key];
      if (typeof (value) === 'object') {
        this.calc(value);
      } else {
        console.log(key + ':' + value);
      }
    });
  }

}

Upvotes: 1

Code Maniac
Code Maniac

Reputation: 37755

You can use Destructuring assignment

var d = {"dynamic": {"information": "laptop","desc": { "mimetype": "image/jpeg","id": "shsj44","file_id": "pexels-photo.jpeg" },"_id": "shsj44"}}
 
let dynamicKey = Object.keys(d)[0]
let {[dynamicKey]:{desc:{
  file_id
},_id}} = d

console.log(file_id, '\n', _id)

Upvotes: 2

brk
brk

Reputation: 50291

That is because of the + before the value, which will try to concatenate the value and you will see [object object]

var d = {
  "pexels-photo.jpeg": {
    "information": "laptop",
    "desc": {
      "mimetype": "image/jpeg",
      "id": "shsj44",
      "file_id": "pexels-photo.jpeg"
    },
    "_id": "shsj44"
  }
}


Object.keys(d).forEach(function(key) {
  let value = d[key];
  console.log(key + ' : ', value);
  console.log(key + ' : ', value.desc.id);
});

Upvotes: 1

Related Questions