如何通过JsonObject的键值从Gson的JsonArray中获取目标JsonObject
如何通过JsonObject的键值从Gson的JsonArray中获取目标JsonObject
嘿,我来帮你搞定这个问题!先看看你给出的原始JSON数组:
[{key: "one", value: "beach"}, {key: "two", value:"sky"}]
你在JavaScript里用arr.filter(x=>key=='one')就能轻松筛选,换到Gson的Java环境里,咱们可以手动实现类似的逻辑——毕竟Gson的JsonArray本身没有内置的filter方法,不过写起来也很简单。
首先,你已经通过解析拿到了JsonArray:
JsonElement jsonElement = new JsonParser().parse(yourJsonString); JsonArray jsonArray = jsonElement.getAsJsonArray();
接下来,如果你只想找到第一个匹配key值的JsonObject,可以这么写:
// 定义你要找的目标key值 String targetKey = "one"; JsonObject targetJsonObject = null; // 遍历JsonArray里的每一个元素 for (JsonElement element : jsonArray) { // 先判断当前元素是不是JsonObject类型 if (element.isJsonObject()) { JsonObject currentObj = element.getAsJsonObject(); // 检查对象里有没有"key"字段,并且值和目标匹配 if (currentObj.has("key") && currentObj.get("key").getAsString().equals(targetKey)) { targetJsonObject = currentObj; break; // 找到第一个匹配的就跳出循环,不用继续遍历了 } } } // 拿到目标对象后就可以使用啦 if (targetJsonObject != null) { String targetValue = targetJsonObject.get("value").getAsString(); System.out.println(targetValue); // 这里会输出"beach" }
要是你需要所有匹配key值的JsonObject(比如有多个key为"one"的对象),那就用一个List来收集:
List<JsonObject> matchingObjects = new ArrayList<>(); String targetKey = "one"; for (JsonElement element : jsonArray) { if (element.isJsonObject()) { JsonObject currentObj = element.getAsJsonObject(); if (currentObj.has("key") && currentObj.get("key").getAsString().equals(targetKey)) { matchingObjects.add(currentObj); } } } // 现在matchingObjects里就是所有符合条件的JsonObject啦
这样就实现了和JavaScript里filter类似的效果,是不是很清晰?
备注:内容来源于stack exchange,提问作者DavidDunham
相关产品推荐
相关产品推荐

