如何比较过滤器运算符中的数字字符串?

问题描述

data: [
    {
        "name": "mark","age": "20"
    },{
        "name": "john","age": "10"
    }
]

在这种情况下,如何让年龄大于 10?

示例代码

JsonPath.read(json,"$.data[?(@.age > 10)]");

解决方法

这可以使用 Jayway 的 JsonPath 库来完成。 首先,您显示的 JSON 不适合处理,缺少包装 { }。 其次,如果您将数字作为字符串进行测试,Jayway 的比较运算符会起作用(这有点奇怪,但库以这种方式在内部执行了所需的转换)。

所以,使用这个 JSON:

{
   "data":[
      {
         "name":"mark","age":"20"
      },{
         "name":"john","age":"10"
      }
   ]
}

还有这个过滤器:

$.data[?(@.age > '10')]

您得到了预期的结果 [{"name" : "mark","age" : "20"}]。您可以online here对其进行测试。

,

您可以将 json 字符串转换为 java 对象。然后你可以做如下操作

import com.google.gson.Gson;

public class Example {

    public static void main(String[] args) {
        try {
            Gson gson = new Gson();
            String json = "[{\"name\":\"mark\",\"age\":\"20\"},{\"name\":\"john\",\"age\":\"10\"}]";
            Student[] studentList = gson.fromJson(json,Student[].class);
            for (int i = 0; i < studentList.length; i++) {
                Student student = studentList[i];
                if (student.getAge() > 10) {
                    System.out.println(student.getName()+" age is greater than 10");
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

将json字符串转换为对象:https://beginnersbug.com/convert-json-string-to-java-object/