使用java在json中使用多个键获取键值
如何在java中使用多个键获取键值 示例:我想提取id=121,number=1的名称使用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": ""
[{
"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']