2017-01-05 8 views
0

私は、次のJSONファイルからアイテム2名を持つアイテムのテストIDを取得しようとしています:このJSONは、私は郵便配達に走ったGETリクエストの応答である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の任意のキーの値を取得できますが、 というItemIDの項目の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の1つがあります。 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; 

} 

はもちろん、私はより多くの動的挙動の引数として項目名を渡しますが、それは動作します:)

関連する問題