Извлечение вложенного объекта ответа JSON-массива с помощью JS Lodash в Postman - PullRequest
1 голос
/ 03 июля 2019

Я хочу узнать, как использовать Lodash для извлечения переменных из ответа JSON, потому что традиционные методы, описанные в других вопросах Postman, не объясняют простой способ сделать это, как я делал это с помощью пути json в Jmeter.

Мне нужно перевести следующие пути json в выражение Lodash, которое возвращает те же значения, что и пути JSON

1. FlightSegmentsItinerary[*].Flights[*].Key 
2. $..Flights[*].Key
3. Travelers[*].[?(@.TypeCode == "INF")].FirstName (returns the name of the passangers whose type code are == "INF")

Ответ JSON:

 {
"Travelers": [
    {
        "TypeCode": "ADT",
        "FirstName": "FULANO",
        "Surname": "LAZARO",
        "Key": "1.1"
    },
    {
        "TypeCode": "INF",
        "FirstName": "MENGANO",
        "Surname": "XULO",
        "Key": "2.2"
    }
],
"FlightSegmentsItinerary": [
    {
        "Flights": [
            {
                "Key": "1"
            },
            {
                "Key": "2"
            }
        ]
    }
]
}

ПокаЯ смог извлечь Ключи путешественников (Travelers [*]. Key), используя это:

var jsonData = pm.response.json();    
var travelerKeys = _.map(jsonData.Travelers, 'Key');
console.log("travelerKeys: " + travelerKeys);
Output: travelerKeys: 1.1,2.2

Как видите, путь JSON:

Travellers [*].Key

В Lodash выглядит примерно так:

var travelerKeys = _.map (jsonData.Travelers, 'Key');

для этого случая.

Ответы [ 2 ]

1 голос
/ 03 июля 2019

var jsonData = {
  "Travelers": [{
      "TypeCode": "ADT",
      "FirstName": "FULANO",
      "Surname": "LAZARO",
      "Key": "1.1"
    },
    {
      "TypeCode": "INF",
      "FirstName": "MENGANO",
      "Surname": "XULO",
      "Key": "2.2"
    }
  ],
  "FlightSegmentsItinerary": [{
    "Flights": [{
        "Key": "1"
      },
      {
        "Key": "2"
      }
    ]
  }]
}

// 1. FlightSegmentsItinerary[*].Flights[*].Key 
console.log( _(jsonData.FlightSegmentsItinerary).flatMap('Flights').map('Key') ) 

//2. $..Flights[*].Key
console.log( _.chain(jsonData).values().flatten().find('Flights').values().flatten().map('Key') )

//3. Travelers[*].[?(@.TypeCode == "INF")].FirstName (returns the name of the passangers whose type code are == "INF")
console.log( _(jsonData.Travelers).filter(['TypeCode', 'INF']).map('FirstName') )
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.11/lodash.min.js"></script>

Другой вариант - попробовать библиотеки JavaScript, такие как https://github.com/dchester/jsonpath

.

var jsonData = {
  "Travelers": [{
      "TypeCode": "ADT",
      "FirstName": "FULANO",
      "Surname": "LAZARO",
      "Key": "1.1"
    },
    {
      "TypeCode": "INF",
      "FirstName": "MENGANO",
      "Surname": "XULO",
      "Key": "2.2"
    }
  ],
  "FlightSegmentsItinerary": [{
    "Flights": [{
        "Key": "1"
      },
      {
        "Key": "2"
      }
    ]
  }]
}

console.log(jsonpath.query(jsonData, '$.FlightSegmentsItinerary[*].Flights[*].Key'))

console.log(jsonpath.query(jsonData, '$..Flights[*].Key'))

console.log(jsonpath.query(jsonData, '$.Travelers..[?(@.TypeCode == "INF")].FirstName')) 
<script src="https://cdn.jsdelivr.net/npm/jsonpath@1.0.2/jsonpath.min.js"></script>

Поскольку Postman не поддерживает fetch и XMLHttpRequest, содержимое файла jsonpath.min.js можно сохранить в переменной окружения, а затем eval(pm.environment.get('jsonpath')); перед использованием, как описано в https://community.getpostman.com/t/adding-external-libraries-to-postman/1971/4

0 голосов
/ 04 июля 2019

Вы должны указать Postman, какой модуль песочницы вы собираетесь использовать, используя функцию require (см. Код ниже).Ошибка, которую вы получаете, имеет некоторую проблему с почтальоном, некоторые из них работают, немногие из них не Здесь они говорят и Вот трекер проблем почтальона

код, который я пробовали работал для меня как

const moment = require('lodash');
var keys = _.chain(obj.Travelers)
        .map("Key")
        .flatten()
        .unique()
        .value();
console.log(keys);

выход

Array:[]
0 : "1.1"
1 : "2.2"

форму, более подробную информацию вы можете посмотреть на
Ссылка API Почтальона Песочница
почтальон и идеальное партнерство

...