2017-01-13 46 views
0

我返回一個包含許多對象的JSON數組,我期望能夠搜索每個對象中的屬性,然後返回滿足此條件的對象標準。Java JSON/GSON - 搜索數組中的所有對象並返回匹配

我能夠返回JSON數組,但我在如何搜索對象以將屬性值與給定值匹配時遇到問題。

從陣列中的一些示例值:

[ 
    {"blobJson":"x","deviceMfg":10,"eventCode":0,"sensorClass":3,"sensorUUID":"136199","timeStamp":1.48338464E9,"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) 

回答

1

問題是你試圖將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.48338464E9,\"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())); 

} 
+0

這回從表中的一個條目,也許我應該更清楚。我希望能夠搜索屬性(例如「sensorClass = 3」)並返回符合該條件的所有對象。 – Colin747

+0

如果我遞增'.get(0)'值,這會返回每個對象嗎? – Colin747

+1

確切地說,你甚至可以使用'root.getAsJsonArray()。size()' –

0

這裏是你可以嘗試

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) { 
} 
相關問題