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

JavaJSON/GSON-搜索数组中的所有对象并返回匹配项,java,json,gson,Java,Json,Gson,我返回一个包含许多对象的JSON数组,我希望能够搜索每个对象中的属性,然后返回满足此条件的对象 我能够返回JSON数组,但我在如何搜索对象以将属性值与给定值匹配方面遇到了问题 数组中的一些示例值: [ {"blobJson":"x","deviceMfg":10,"eventCode":0,"sensorClass":3,"sensorUUID":"136199","timeStamp":1.483384640123117E9,"uID":"136199_3_10"}, {"blobJs

我返回一个包含许多对象的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:
incompatible types: java.lang.String cannot be converted to int
我已尝试将
rootObj.get(属性)
更改为
rootArr.get(属性)
,但返回错误:

java.lang.IllegalStateException: Not a JSON Object:
incompatible types: java.lang.String cannot be converted to int
这是方法调用:

method("136199", Arrays.asList("blobJson", "deviceMfg", "uID"));
方法声明:

 void method(String sensor, List<String> attributes)
void方法(字符串传感器,列表属性)

问题是您试图将JsonArray处理为JsonObject。试试下面的代码,看看它是否适合你。现在的关注点是-
jsonobjectrootobj=rootArr.get(0.getAsJsonObject()


这是你可以尝试的

 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) {
}
试试看{
JSONArray JSONArray=新的JSONArray(数据);
for(int i=0;i
这从表中返回了一个条目,也许我应该更清楚一些。我希望能够搜索一个属性(例如“sensorClass=3”)并返回符合该条件的所有对象。如果我增加
.get(0)
值,这会返回每个对象吗?确切地说,您甚至可以使用
root.getAsJsonArray().size()