2017-01-04 4 views
0

Я использую версию Jayway JsonPath 2.2 в JAVA. У меня мало вопросов по тому же поводу.JsonPath Fetch string after filter

Пример JSON:

{ "l5": [ { "type": "type1", "result": [ "res1" ] }, { "type": "type2", "result": [ "r1" ] } ] }

  1. Я хочу, чтобы извлечь строку после фильтра применяется?

    Например:

    Path используется для извлечения строки является l5[?(@.type == 'type2')].type Ожидаемый результат: type2 (строка), но получение [ "типа2"] (массив)

    Исправьте путь, если я делаю что-нибудь неправильно использовать его как строку?

  2. Невозможно проиндексировать результирующий массив после применения фильтра. Как я могу достичь того же?

    Например:

    Если я использую путь l5[?(@.type == 'type2')][0], вместо возвращения мне первый JSONObject он возвращает []

  3. Можно ли извлечь подстроку из строки с помощью jsonPath?

    Что-то вроде l5[0].type[0,2] => res

Примечание: я не могу делать какие-либо операции в JAVA, так как я хотел, чтобы библиотека родовое?

ответ

0

Возвращаемое значение jsonPath - это всегда массив, приведенный от here.

Итак, операция1, которую вы пытаетесь, невозможна, т. Е. Значение строки никогда не будет возвращено.
Даже операция 2 и операция 3 не выглядят выполнимыми с jjway jsonpath.

Хорошо читайте на jayway Jsonpath.

единственно возможный путь для работы 1 и 2 выглядит, как показано ниже: -

String jsonpath="l5[?(@.type == 'type2')].type"; 
     DocumentContext jsonContext = JsonPath.parse(jsonString); 
     List<String> typeDataList= jsonContext.read(jsonpath); 
     System.out.println(typeDataList.get(0)); //type2 
+0

Только если мы устанавливаем конфигурацию в ALWAYS_RETURN_LIST, она возвращает массив. В противном случае оно будет выдавать значение в соответствии с данными возврата. Например: если я даю путь 'l5 [0] .type', я получаю правильную строку ** type1 **. Но только в случае фильтров я не получаю. Также я не могу добавить дополнительный Java-код для достижения того же. –

Смежные вопросы