Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java在json中使用多个键获取键值_Java_Json_Rest_Rest Assured_Jsonpath - Fatal编程技术网

使用java在json中使用多个键获取键值

使用java在json中使用多个键获取键值,java,json,rest,rest-assured,jsonpath,Java,Json,Rest,Rest Assured,Jsonpath,如何在java中使用多个键获取键值 示例:我想提取id=121,number=1的名称 [{ "id": 121, "name": "Pants", "number": 1, "specification": "" }, { "id": 121, "name": "color", "number": 2, "specification": ""

如何在java中使用多个键获取键值

示例:我想提取id=121,number=1的名称

    [{
        "id": 121,
        "name": "Pants",
        "number": 1,
        "specification": ""
    },
    {
        "id": 121,
        "name": "color",
        "number": 2,
        "specification": ""
    }];

这或许可以这样做

public class Main {

  public static void main(String[] args) throws JSONException {

    String json = "[{\"id\":121,\"name\":\"Pants\",\"number\":1,\"specification\":\"\"},{\"id\":121,\"name\":\"color\",\"number\":2,\"specification\":\"\"}]";

    JSONArray array = new JSONArray(json);

    final int ID = 121;
    final int NUMBER = 1;

    int size = array.length();
    for (int i = 0; i < size; i++) {

      final JSONObject obj = array.getJSONObject(i);
      final int id = obj.getInt("id");
      final int number = obj.getInt("number");

      if (id == ID && number == NUMBER) {
        System.out.println(obj.getString("name"));
      }
    }

  }
}

如果您想要更通用的东西,您可能希望将其反序列化为一个对象并使用Java8收集方法。这是我在谷歌搜索中找到的。

如果你有专门的课程,比如:

class A {

    private String id;
    private String name;
    private int number;
    private String specification;

    //getters and setters method
}
然后可以使用org.codehaus.jackson.map.ObjectMapper从json创建对象:

ObjectMapper mapper = new ObjectMapper();
A[] objects = mapper.readValue(jsonString, A[].class);
现在,@vader如何提到它,您可以使用过滤方法获得正确的值:

List<A> list = Arrays.stream(objects)
    .filter(obj -> obj.getId().equals("121") && obj.getNumber() == 1)
    .collect(Collectors.toList());

您是否已经有用于存储具有4个字段的此类对象的Java数据类?您可以使用jsonPath通配符来提取此类值,使用此jsonPath:[?@.id=='121'&&&@.number=='1']