Есть ли способ преобразовать логическое значение JMESPATH в противоположное значение?

#boolean #jmespath

Вопрос:

У меня есть JSON со значением true, я хочу вернуть значение false.

Ниже приведен пример:

 {"a": {"City": "Hello", "flag": false}}
 

Я звоню a.flag , чтобы получить false значение. Однако я не смог придумать способ преобразования false в true .

Я пробовал a.flag == false в https://jmespath.org/tutorial.html но это работает неправильно.

Комментарии:

1. Опубликовано слишком рано! Я нашел решение. Если вы заключите путь JMESPATH в круглые скобки, а затем поставите a ! впереди, в возвращает противоположное. Бывший) ! (a.flag)

Ответ №1:

Ваша попытка не работает, потому что ваше false значение неправильно интерпретируется в условии a.flag == false .

Что вы действительно делаете, когда делаете a.flag == false , так это сравниваете значение ключа false вашего объекта JSON со значением a.flag .

Способ подтвердить это — выполнить запрос:

 foo.flag == false
 

Над этими двумя JSON

  •  {
      "false": "some value",
      "foo": {
        "city": "Brussels",
        "flag": "some value"
      }
    }
     

    который вернется true

  •  {
      "false": "some other value",
      "foo": {
        "city": "Brussels",
        "flag": "some value"
      }
    }
     

    который вернется false


Правильный способ сравнить значение с логическим значением в JMESpath-это использовать буквальное выражение и, таким образом, поместить логическое значение `true` в обратные ссылки .

С запросом:

 foo.flag == `false`
 

Через JSON

 {
  "foo": {
    "city": "Brussels",
    "flag": false
  }
}
 

Мы получаем ожидаемое: true


И, конечно, как вы это прокомментировали, вы можете просто использовать не-выражение:

 !(foo.flag)