繁体   English   中英

Java JSON / GSON-搜索数组中的所有对象并返回匹配项

[英]Java JSON/GSON - search all objects within an array and return match

我正在返回一个包含许多对象的JSON数组,我希望能够搜索每个对象中的属性,然后返回满足此条件的对象。

我可以返回JSON数组,但是在如何搜索对象以将属性值匹配到给定值上遇到麻烦。

数组中的一些示例值:

[
  {"blobJson":"x","deviceMfg":10,"eventCode":0,"sensorClass":3,"sensorUUID":"136199","timeStamp":1.483384640123117E9,"uID":"136199_3_10"},
  {"blobJson":"x","deviceMfg":10,"eventCode":0,"sensorClass":3,"sensorUUID":"136199","timeStamp":1.483379834470379E9,"uID":"136199_3_10"},
  {"blobJson":"x","deviceMfg":10,"eventCode":0,"sensorClass":3,"sensorUUID":"136199","timeStamp":1.483384639621985E9,"uID":"136199_3_10"}
]

我正在使用以下代码返回该数组,该数组可以按预期工作:

   JsonParser jp = new JsonParser(); 
   JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent())); 
   JsonArray rootArr = root.getAsJsonArray();

下面的代码块是我用来在对象中搜索给定属性值的代码,当仅返回一个对象时此代码有效,但在返回整个数组时给出错误:

   JsonObject rootObj = rootArr.getAsJsonObject();
   for (String attribute : attributes) {
     System.out.println(rootObj.get(attribute).getAsString());
   }

它给出了错误:

java.lang.IllegalStateException: Not a JSON Object:

我尝试将rootObj.get(attribute)更改为rootArr.get(attribute)但是返回错误:

incompatible types: java.lang.String cannot be converted to int

这是方法调用:

method("136199", Arrays.asList("blobJson", "deviceMfg", "uID"));

方法声明:

 void method(String sensor, List<String> attributes)

问题是您正在尝试将JsonArray对待为JsonObject。 试试下面的代码,看看它是否适合您。 现在的关注点是JsonObject rootObj = rootArr.get(0).getAsJsonObject();

public static void main(String[] args) {

    String json = "[{\"blobJson\":\"x\",\"deviceMfg\":10,\"eventCode\":0,\"sensorClass\":3,\"sensorUUID\":\"136199\",\"timeStamp\":1.483384640123117E9,\"uID\":\"136199_3_10\"},{\"blobJson\":\"x\",\"deviceMfg\":10,\"eventCode\":0,\"sensorClass\":3,\"sensorUUID\":\"136199\",\"timeStamp\":1.483379834470379E9,\"uID\":\"136199_3_10\"},{\"blobJson\":\"x\",\"deviceMfg\":10,\"eventCode\":0,\"sensorClass\":3,\"sensorUUID\":\"136199\",\"timeStamp\":1.483384639621985E9,\"uID\":\"136199_3_10\"}]";

    JsonParser jp = new JsonParser();
    JsonElement root = jp.parse(json);
    JsonArray rootArr = root.getAsJsonArray();

    JsonObject rootObj = rootArr.get(0).getAsJsonObject();
    rootObj.entrySet().forEach(entry -> System.out.println(entry.getKey()+": "+entry.getValue().getAsString()));

}

这是您可以尝试的

 try {
    JSONArray jsonArray = new JSONArray(data);
    for (int i = 0; i < jsonArray.length(); i++) {
    Log.e("JSON Count", jsonArray.get(i).toString());
   }
} catch (Exception e) {
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM