JSONPath не возвращает значения при использовании в карате, но использует онлайн-оценщик - PullRequest
1 голос
/ 14 июля 2020

Я новичок в JSONPath, так что это может быть моя ошибка, но когда я пробую это выражение в онлайн-оценщике (https://jsonpath.com/), оно работает, но не работает в каратэ.

$..entry[?(@.resource.resourceType == 'AllergyIntolerance' && @.resource.category=='food')].resource.code.coding.*.system

Если я использую индекс, я могу получить первый элемент, но я хочу захватить все элементы, которые соответствуют выражению, независимо от их индекса, на случай, если в массиве больше элементов, а не мои данные c пример.

Рабочий путь JSONPath:

$..entry[?(@.resource.resourceType == 'AllergyIntolerance' && @.resource.category[0]=='food')].resource.code.coding.*.system

Я пытался использовать подстановочные знаки, но это, похоже, не работает:

$..entry[?(@.resource.resourceType == 'AllergyIntolerance' && @.resource.category[*]=='food')].resource.code.coding.*.system

JSON фрагмент с соответствующие разделы

{
  "entry": [  {
    "resource": {
      "resourceType": "AllergyIntolerance",
      "id": "allergyFood",
      "category": [ "food" ],
      "criticality": "high",
      "code": {
        "coding": [ {
          "system": "http://snomed.info/sct",
          "code": "91935009",
          "display": "Allergy to peanuts"
        } ],
        "text": "Allergy to peanuts"
      },
      "reaction": [ {
        "manifestation": [ {
          "coding": [ {
            "system": "http://snomed.info/sct",
            "code": "271807003",
            "display": "skin rash"
          } ],
          "text": "skin rash"
        } ],
        "severity": "mild"
      } ]
    }
  }, {
    "resource": {
      "resourceType": "AllergyIntolerance",
      "id": "allergyMed",
      "verificationStatus": "unconfirmed",
      "type": "allergy",
      "category": [ "medication" ],
      "criticality": "high",
      "code": {
        "coding": [ {
          "system": "http://www.nlm.nih.gov/research/umls/rxnorm",
          "code": "7980",
          "display": "penicillin"
        } ]
      }
    } 
  } ]
}

1 Ответ

1 голос
/ 14 июля 2020

Механизм JsonPath, как известно, имеет проблемы с такими сложными выражениями. Пожалуйста, используйте вместо него karate.filter(), который, я уверен, вы согласитесь, гораздо более читабелен: https://github.com/intuit/karate#json -transforms

* def resources = $..resource
* def fun = function(x){ return x.resourceType == 'AllergyIntolerance' && x.category[0] == 'food' }
* def temp = karate.filter(resources, fun)
...