JavaJSON/GSON-搜索数组中的所有对象并返回匹配项
我返回一个包含许多对象的JSON数组,我希望能够搜索每个对象中的属性,然后返回满足此条件的对象 我能够返回JSON数组,但我在如何搜索对象以将属性值与给定值匹配方面遇到了问题 数组中的一些示例值: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
[
{"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()