JSONPath как добавить несколько элементов и сравнить один из элементов

#json #jsonpath

Вопрос:

 {
    "data": {
        "a": 20,
        "b": 30,
        "c": 40
    }
}
 

Мое выражение запроса: $.data[?(@.a < (@.b @.c))]

Я надеюсь, что он вернет следующий результат: {"a": 20}

Но в этом случае произойдет следующая ошибка:

 Failed to parse filter: [?(@.a < (@.b   @.c))], error on position: 9, char: (
 

Каково правильное выражение?

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

1. В чем заключается ошибка, которая возникает?

2. net.minidev.json.синтаксический анализатор. Исключение синтаксического анализа: Неожиданный символ (,) в позиции 60.

3. это опечатка. это должно быть «c»: 40, а не «c»,40

4. Я исправил вопрос, спасибо

Ответ №1:

исправьте строку json следующим образом "c":40

Вы можете преобразовать строку json в JavaObject с помощью ObjectMapper, объектов Java, представляющих вашу строку json

 public class Data{
    public int a;
    public int b;
    public int c;
}

public class Root{
    public Data data;
}
 

затем вы можете получить доступ к данным, как показано ниже, которые сопоставляются myJsonString с объектом java, root содержит все данные

 // import com.fasterxml.jackson.databind.ObjectMapper; // version 2.11.1
// import com.fasterxml.jackson.annotation.JsonProperty; // version 2.11.1
ObjectMapper om = new ObjectMapper();
Root root = om.readValue(myJsonString), Root.class);