Невозможно получить значение ключа с пробелами с помощью библиотеки JsonPath

Я использую библиотеку Json Path для анализа JSON. . Я следую json, у которого есть ключ с пробелом:

{
    "attributes": {
        "First Name": "Jim",
        "Last Name": "Rohn"
    }
}

Чтобы получить значение First Name, я написал такой код (где json - объект, который находится выше json) -

String firstName = JsonPath.from(json).getString("attributes.First Name");

Но это приводит к следующей ошибке -

java.lang.IllegalArgumentException: Invalid JSON expression:
Script1.groovy: 1: expecting EOF, found 'Attributes' @ line 1, column 67.
   .First Name

Не могли бы вы подсказать, как получить значения ключа с пробелами с помощью библиотеки json-path?


person Alpha    schedule 21.01.2020    source источник


Ответы (3)


Попробуйте использовать скобки для First Name следующим образом:

String firstName = JsonPath.from(json).getString("attributes.['First Name']");

ОБНОВЛЕНИЕ

Извините за смешивание разных JsoPath библиотек.

Если вы используете com.jayway.jsonpath, попробуйте следующий способ экранирования:

DocumentContext jsonContext = JsonPath.parse(json);
String firstName = jsonContext.read("$.attributes.['First Name']");

Но если вы используете ***.restassured.json-path, используйте этот:

String firstName = JsonPath.from(json).getString("attributes.'First Name'");
person LHCHIN    schedule 21.01.2020
comment
Я использовал io.rest-assured.rest-assured.4.1.2, который внутренне использует io.rest-assured.json-path.4.1.2 - person Alpha; 22.01.2020
comment
@TDHM Как и решение в этом посте Как мне получить значение ключа, если он содержит пробел в Rest Assured / Serenity? тоже не поможет? - person LHCHIN; 22.01.2020
comment
Большое спасибо, чувак, это помогло! Должно получиться attributes.'First Name' - person Alpha; 22.01.2020
comment
@TDHM Отлично! Я обновил свой пост, пожалуйста, ознакомьтесь с ним! - person LHCHIN; 22.01.2020

Вы должны экранировать ключ одинарными кавычками

Используйте нижеприведенный код:

String firstName = JsonPath.from(json).getString("'attributes.First Name'");
person Sumit Singh    schedule 21.01.2020
comment
Это не приводит к ошибке, но возвращает null как значение, даже если имеется ненулевое значение. - person Alpha; 22.01.2020

Если вы используете библиотеку io.restassured.path.json.JsonPath, тогда в выражении пути требуется Escape Sequences.

String firstName = JsonPath.from(json).getString("attributes.\"First Name\"");

\" <-- Insert a double quote character in the text at this point.

Таким образом, ваше выражение пути выглядит как (attributes."First Name") и может быть проанализировано библиотекой JsonPath

person Ayush kumar    schedule 25.06.2021