mercredi 17 février 2021

Postman - Looping through an array of nested objects to make a variable

I am trying to set a variable from following phone number with value: “+33652556777” (index 4 in JSON attached below) which is the last object in contacts (index 4).

To do so is pretty simple:

let jsonData = pm.response.json();
console.log (jsonData.contacts[4].phone_numbers[0].value)  
const PhoneNumber = jsonData.contacts[4].phone_numbers[0].value
pm.environment.set("Jacky", PhoneNumber);

Since I have to use different query parameters to filter by eg. created_at=asc, desc, the property of the phone_numbers order might change index number and I won’t be able to fetch desire phone number "+33652556777” instead it will set a different phone number which I cannot allow.

I know there is way to fetch our number and make it variable for next requests, which is iterating over properties or keys in the object “ for….in or for…of ” but for some reason I cannot achieve it.

What I could achieve is to get through first object “contacts” but impossible to get to its nested array “phone_numbers”. Here is how I did it:

let jsonData = pm.response.json();
let contact;
for (let filter of jsonData.contacts){
if (filter.last_name == "Rowland"){
   contact = filter;
}} 
console.log (contact);

Could you please help?

Here goes the JSON body response:

{
  "contacts": [
    {
      "id": 11121211,
      "direct_link": "https://example.example",
      "first_name": "test1",
      "last_name": "test",
      "company_name": "test",
      "information": null,
      "is_shared": true,
      "created_at": 1582798926,
      "updated_at": 1582798926,
      "emails": [],
      "phone_numbers": [
        {
          "id": 60065270,
          "label": "Work",
          "value": "+33134567666"
        }
      ]
    },
    {
      "id": 22222222,
      "direct_link": "https://example.example",
      "first_name": null,
      "last_name": null,
      "company_name": null,
      "information": null,
      "is_shared": true,
      "created_at": 1583686067,
      "updated_at": 1583686067,
      "emails": [],
      "phone_numbers": [
        {
          "id": 22266444,
          "label": "Work",
          "value": "+33134567899"
        }
      ]
    },
    {
      "id": 33333564,
      "direct_link": "https://example.example",
      "first_name": "Jessica",
      "last_name": "Biel",
      "company_name": "N-Sync",
      "information": null,
      "is_shared": true,
      "created_at": 1583686086,
      "updated_at": 1583686086,
      "emails": [],
      "phone_numbers": []
    },
    {
      "id": 45678901,
      "direct_link": "https://example.example",
      "first_name": null,
      "last_name": null,
      "company_name": null,
      "information": null,
      "is_shared": true,
      "created_at": 1583686105,
      "updated_at": 1583686105,
      "emails": [],
      "phone_numbers": [
        {
          "id": 22266444,
          "label": "Work",
          "value": "+33134567333"
        }
      ]
    },
    {
      "id": 56789123,
      "direct_link": "https://example.example",
      "first_name": "Jacky",
      "last_name": "Rowland",
      "company_name": "Test Company1",
      "information": "",
      "is_shared": true,
      "created_at": 1583745888,
      "updated_at": 1608556499,
      "emails": [
        {
          "id": 76594398,
          "label": "Work",
          "value": "mandatory_field@example.com"
        }
      ],
      "phone_numbers": [
        {
          "id": 60650277,
          "label": "Mobile",
          "value": "+33652556777"
        }
      ]
    }
  ],
  "meta": {
    "count": 6,
    "total": 241,
    "current_page": 1,
    "per_page": 5,
    "next_page_link": "https://example.example",
    "previous_page_link": null
  }
}

Aucun commentaire:

Enregistrer un commentaire