2017-01-05 40 views
0

我想從以下JSON文件獲取其項目名稱項目2testId如何從JSON文件中獲取相對值?

{ 
    "errors": [], 
    "data": { 
    "collections": [ 
     { 
     "testId": 250, 
     "name": "Item1", 
     "itemCount": 3 
     }, 

     { 
     "testId": 350, 
     "name": "Item2", 
     "itemCount": 4 
     }, 
     { 
     "testId": 411, 
     "name": "Item3", 
     "itemCount": 1 
     }, 
     { 
     "testId": 450, 
     "name": "null", 
     "itemCount": 0 
     } 
    ] 
    } 
} 

這JSON是GET請求我的郵遞員跑開的響應。

我可以獲取此JSON中任何鍵的值,但我無法添加相關條件,如獲取名稱爲Item6的項目的testID的 。

我使用數組列表來獲取所有元素的testID值,這對我來說工作正常。我可以在下面做出任何改變以達到我想要的效果嗎?

protected String getTokenValueUnderHierarchy(String responseString) throws ClientProtocolException, IOException { 
     String responseRecordsTitle = null; 
     List<String> list = Arrays.asList(responseString.split("testId")); 
     System.out.println("list.size()::"+list.size()); 
     for (int i=0;i<list.size();i++){   
      System.out.println("List Element:"+list.get(i)); 
      responseRecordsTitle = getTokenValue(responseString,"testId"); 
     } 
     return responseRecordsTitle; 

    } 

PS:getTokenValue(String,String)是我創建的一個函數,用於獲取值並且工作正常。

+0

有編寫自定義邏輯的任何具體的原因是什麼?爲什麼你不能使用像這個URL中顯示的現有api https://www.mkyong.com/java/jackson-2-convert-java-object-to-from-json/總是更好地將json轉換爲對象以方便維護(將來有幫助) – RamPrakash

+0

是的!我需要這個邏輯,因爲我將獲取ID,將被用作其他服務請求的URL參數。 – SSabharwal

回答

0

您可以將用戶JSON解析器用於java。這裏是其中之一How to parse JSON in Java。從JSON數組中檢索值時,可以執行簡單的字符串比較來檢查條件。希望有所幫助。

0

我收到了!感謝提示@Castor。 以下爲我工作:

responseJson是作爲GET請求的響應得到的JSON文件。

protected int getIdFromArrayOfCollectionItems(String responseJson) throws JSONException{ 
    int collectionId=0; 
    JSONObject root = new JSONObject(responseJson).getJSONObject("data"); 
    JSONArray collectionArray = root.getJSONArray("collections"); 
    for(int i =0 ;i<collectionArray.length();i++){ 
     JSONObject collectionObject = collectionArray.getJSONObject(i); 
     String name = collectionObject.getString("name"); 
     if(name.equalsIgnoreCase("Item2")){ 
      collectionId = collectionObject.getInt("collectionId"); 
      System.out.println("collection ID::"+collectionId); 
     } 
    } 
    return collectionId; 

} 

當然我會把項目名作爲參數更多的動態行爲,但它的工作原理:)