Как использовать eval в каратэ? - PullRequest
0 голосов
/ 26 июня 2018

Я уже просмотрел документацию по каратэ и попробовал приведенный ниже код:

 * eval if (nearby.content[?(@.title == 'Nearby Malls & Restaurants')] == '#notnull') karate.call(* def nearByMallsRestraurants = get nearby.content[?(@.title == 'Nearby Malls & Restaurants')].items[?(@.name)])

Но его ошибка выдает. Я пытаюсь извлечь все названия Ближайших торговых центров и ресторанов, если в массиве Ближайших мест и достопримечательностей есть Ближайшие торговые центры иРесторан. Также, если возможно, подскажите, пожалуйста, как использовать collection.sort для сортировки названий ближайших торговых центров.

Мой json выглядит так:

"nearby": {
        "title": "Nearby Places and Landmarks",
        "content": [
          {
            "title": "Nearby Malls & Restaurants",
            "items": [
              {
                "name": "Forum Mall, Koramangala",
                "distance": 1.8
              },
              {
                "name": "Eggzotic",
                "distance": 2.4
              },
              {
                "name": "Kerala Pavilion Restaurant",
                "distance": 2.4
              },
              {
                "name": "New Shanthi Nagar",
                "distance": 2.5
              },
              {
                "name": "Venus Biryani",
                "distance": 2.8
              }
            ]
          },
          {
            "title": "Closest Airport, Railway Station & Bus Stand",
            "items": [
              {
                "name": "Madiwala Ayyappa Temple Bus Stop",
                "distance": 2.1
              },
              {
                "name": "Kalasipalyam Bus Stand",
                "distance": 5.7
              },
              {
                "name": "Bangalore Cantonment Railway Station",
                "distance": 6.5
              },
              {
                "name": "Kempegowda/ Majestic bus station",
                "distance": 7
              },
              {
                "name": "KSR Bengaluru City Railway Station",
                "distance": 7.5
              },
              {
                "name": "KR Puram Railway Station",
                "distance": 8.5
              },
              {
                "name": "KSRTC Mysore Road Satellite Bus Stop",
                "distance": 9
              }
            ]
          }
        ]
      }

1 Ответ

0 голосов
/ 26 июня 2018

Обратите внимание: JsonPath - это не JS, и вы тут все перемешиваете.Мой совет: не усложняйте вещи и не разбивайте их на несколько этапов.Это должно ответить на все ваши вопросы, включая сортировку:

* def malls = $nearby.content[?(@.title=='Nearby Malls & Restaurants')]
* def names = $malls..name
* def Collections = Java.type('java.util.Collections')
* eval Collections.sort(names)
* print names

вывод:

[
  "Eggzotic",
  "Forum Mall, Koramangala",
  "Kerala Pavilion Restaurant",
  "New Shanthi Nagar",
  "Venus Biryani"
]
...