Карате: подстановочные знаки JsonPath не работали или частично не работали - PullRequest
0 голосов
/ 28 февраля 2019

JSON-файл jsonExample:

{
  "store": {
    "book": [
      {
        "category": "fiction",
        "author": "Evelyn Waugh",
        "title": "Sword of Honour",
        "something": 12.99
      }
    ],
    "bicycle": {
      "color": "red",
      "price": 19.95
    }
  },
  "expensive": 10
}

Я хочу обновить "something".Когда я использую:

1) * set jsonExample $.store.book[0].something = 13 - работает

2) * set jsonExample $..book[0].something = 13 - работает

3) * eval jsonExample.store.book[0].something = 13 - работает

НО

1) * set jsonExample $..something = 13 - это НЕ работает

2) * eval jsonExample..something = 13 - это НЕ работает

Я понимаю, что set не работает с подстановочными знаками ($[*].foo или $..foo).Но подстановочные знаки работают с eval?Если да, то как?Пожалуйста, пример на основе файла jsonExample выше.

1 Ответ

0 голосов
/ 28 февраля 2019

Я не понимаю, почему вы так обеспокоены этим.Подстановочные знаки не будут работать для обновления JSON.Это так просто.

И еще одна вещь, eval будет работать только с чистым JS.Json-Path - это НЕ чистый JS.

Может быть, это объяснит это более четко.

Если * set jsonExample $..book[0].something = 13 работает, пожалуйста, предположите, что это ошибка.Не надейся на это.В этом случае это может сработать, потому что код является максимально устойчивым.Но это может не сработать в других случаях или в будущих версиях каратэ.

Все приведенное ниже будет работать:

* def jsonExample =
"""
{
  "store": {
    "book": [
      {
        "category": "fiction",
        "author": "Evelyn Waugh",
        "title": "Sword of Honour",
        "something": 12.99
      }
    ],
    "bicycle": {
      "color": "red",
      "price": 19.95
    }
  },
  "expensive": 10
}
"""
# all these will work
* set jsonExample $.store.book[0].something = 13
* match jsonExample.store.book[0].something == 13

* set jsonExample.store.book[0].something = 14
* match jsonExample.store.book[0].something == 14

* eval jsonExample.store.book[0].something = 15
* match jsonExample.store.book[0].something == 15

Я действительно надеюсь, что это проясняет !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...