jsonPath - как отфильтровать результаты по соответствующей подстроке - PullRequest
0 голосов
/ 05 марта 2019

У меня есть такая структура:

{"payload": {

    "Item1": {
      "property1": "Sunday",
      "property2": "suffering_8890"
    },

    "Item2": {
      "property1": "Monday",
      "property2": "misery_0776"
    },

    "Item3": {
      "property1": "Tuesday",
      "property2": "pain_6756"
    }
  }
}

Мне нужно значение property2, которое содержит определенную подстроку (т. Е. «Страдание»).В конечном итоге мне просто нужен 4-значный код, но даже получение полного значения будет работать.Я могу получить список всех значений property2 с помощью:

$..property2

Это возвращает:

Result[0] = suffering_8890
Result[1] = misery_0776
Result[2] = pain_6756

Как мне отфильтровать его, чтобы он только дал мне результат, содержащийподстрока "убожество"?

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

В отношении полной стоимости вы можете использовать Оператор фильтра , например:

$..[?(@.property2 =~ /misery.*?/i)].property2

Демо:

enter image description here

Вы можете извлечь 4-значное значение из переменной, используя Извлечение регулярных выражений


Если вы хотите сделать это за один снимок:

  1. Добавьте JSR223 PostProcessor в качестве дочернего элемента запроса, который возвращается выше JSON
  2. Поместите следующий код в область «Сценарий»

    vars.put('misery', ((com.jayway.jsonpath.JsonPath.read(prev.getResponseDataAsString(), '$..[?(@.property2 =~ /misery.*?/i)].property2').get(0) =~ ('(\\d+)'))[0][1]))
    
  3. См. Извлеченныйзначение как ${misery}, где требуется

Дополнительная информация: Apache Groovy - почему и как его использовать

0 голосов
/ 05 марта 2019

Вы можете использовать средство извлечения регулярных выражений , а также для упомянутого сценария, чтобы получить четырехзначное число, как показано ниже

property2": "misery_(.*)"

Это поможет вам сохранить четырехзначный кодв переменных JMeter сразу.Если вы настаиваете на том, чтобы узнать требуемое значение из JSON с помощью jsonpath , вы можете использовать фильтр JSON, как показано ниже: -

$..[?(@.property2.indexOf('misery')>=0)]..property2
...