#arrays #json #api #jmeter
Вопрос:
Пример:
API A:
{
"customer":[
{
"name":"Jane",
"phone":"9999999",
"email":"jane@test.com"
},
{
"name":"John",
"phone":"8888888",
"email":"john@test.com"
},
{
"name":"Joe",
"phone":"7777777",
"email":"Joe@test.com"
}
]
}
Используя JSON extractor, я хочу получить имена всех клиентов
итак: Джейн, Джон, Джо
Как мне получить эти значения и преобразовать их в массив
[{"name":"Jane", "name":"John", "name":"Joe"}]
И передать его следующему API?
Примечание: Он должен быть динамическим, чтобы API A мог отображать разные 2 имени или 1 имя или более, и его необходимо настроить в массиве
Комментарии:
1. Сопоставьте их… код:
input.customer.map(v => v.name)
попробуйте это в консоли chrome
Ответ №1:
Прежде всего, ваш [{"name":"Jane", "name":"John", "name":"Joe"}]
неверный JSON, вы можете проверить это сами:
поэтому я сильно сомневаюсь, что это та строка, которую вам нужно сгенерировать.
Поэтому, если вам действительно нужно создать это значение, вы можете сделать что-то вроде:
- Добавьте постпроцессор JSR223 в качестве дочернего элемента запроса, который возвращает эти данные «клиентов»
- Поместите следующий код в область «Сценарий» :
def response = new groovy.json.JsonSlurper().parse(prev.getResponseData()) def payload = new StringBuilder() payload.append('[{') 0.upto(response.customer.size - 1, { index -> payload.append('"name": "').append(response.customer[index].name).append('"') if (index != response.customer.size - 1) { payload.append(',') } }) payload.append('}]') vars.put('payload', payload as String)
${payload}
При необходимости обратитесь к сгенерированному значению
ДЕМОНСТРАЦИЯ:
Дополнительная информация: