Я получаю 90-центовый успех с моим подходом, но когда в ответе есть несколько записей в одном из дочерних ключей, логика перестает работать, и я не могу установить одну общую логику, которая будет работать для всех случаев. ,
Пример ответа:
{
"items": [
{
"id":1,
"name": "John",
"sections": [
{
"id":1,
"description": "John smith"
}
]
}
]
}
Теперь мой сценарий использования говорит, что вы ищете текст Джона, и тогда массив items будет содержать много объектов, чьи items.name или items.sections.description должны содержатьКлючевое слово "Джон"
Логика сопоставления, которую я поставил, работает нормально, потому что я перебираю элементы []. Name и items.sections []. Description
Основная проблема возникает, когда разделы [*]. Description содержат несколько разделов, как показано ниже
{
"items": [
{
"id":1,
"name": "John",
"sections": [
{
"id":1,
"description": "John smith"
},
{
"id":1,
"description": "remain smith of the first object"
}
]
}
]
}
Логика должна теперь работать с элементами []. Name или items.sections [].description (несколько записей разделов [*]. description)
Проблема, с которой я сталкиваюсь, заключается в том, что я перебираю элементы []. name & items []. section [*]. description
Это дает мне все имена и все разделы. Описание в отдельных массивах. Я хочу, чтобы он выдавал меня один за другим.
Например, первый набор результатов должен дать мне ниже
[
"John"
]
and
[
"John smith"
"remain smith of the first object"
]
Так что я могу руВ моей существующей логике, чтобы проверить, доступен Джон или нет. В настоящее время моя логика работает с первой записью описания и не проверяет следующую запись или section.description, что является причиной сбоя при сопоставлении объекта, поскольку во второй записи описания присутствует «john»
{
"items": [
{
"id":11,
"name": "SMITH",
"sections": [
{
"id":11,
"description": "SMITH"
},
{
"id":11,
"description": "JOHN Carter"
}
]
}
]
}
Логика сопоставления, которую я сейчас использую: -
* def matchText =
"""
function (nameArr, sectionArr, matchingWord)
{
for(var i = 0; i < nameArr.length; i++)
var regEx = new RegExp(matchingWord, 'gi')
var nameMatch = nameArr[i].match(regEx)
var secMatch = sectionArr[i].match(regEx)
if (nameMatch ==null && secMatch == null) {
return false;
}
}
return true;
}
"""
* def getName = get response.items[*].name
* def getDescription = get response.items[*].sections[*].description
* assert matchText(getName,getDescription,'john')
Так что эта логика работает, когда у вас одинаковая длина в name & section.description, но когда section.description имеет несколько массивов, тогда нетповторить правильно. Это была единственная причина, по которой я хотел трактовать имя как один объект, а section.description - как другой, даже если в нем будет несколько дочерних идентификаторов.