2017-09-16 13 views
0

すべて、Json配列から情報を引き出す

リクエストの取得後にJSONレスポンスがあります。 userNameを使用して1つのユーザーIDだけを取得したいとします。たとえば、私はuserName Test1のidをしたい場合、それを行う方法?どんな助けもありがとう。

 { 
     "displayLength": "4", 
     "iTotal": "20", 
     "users": [ 
     { 
      "id": "2", 
      "userName": "Test1", 
      "Group": { id:1 
         name:"Test-Admin" 
         } 
     }, 
     { 
      "id": "17", 
      "userName": "Test2", 
      "Group": { id:1 
         name:"Test-Admin" 
         } 
     }, 
     { 
      "id": "32", 
      "userName": "Test3", 
      "Group": { id:1 
         name:"Test-Admin" 
         } 
     }, 
     { 
      "id": "35", 
      "userName": "Test4", 
      "Group": { id:1 
         name:"Test-Admin" 
         } 
     } 

    ] 
    } 

おかげで、

+0

何を試しましたか?私たちにいくつかの努力を示し、どこに問題があるのか​​? –

答えて

1

以下のコードが役立つかどうかを確認してください。ユーザー名をuserName変数に渡し、コードにuserIdが見つかります。

JSONObject json = new JSONObject(" {\n" + "   \"displayLength\": \"4\",\n" 
     + "   \"iTotal\": \"20\",\n" + "   \"users\": [\n" + "   {\n" 
     + "   \"id\": \"2\",\n" + "   \"userName\": \"Test1\",\n" 
     + "   \"Group\": { id:1,\n" + "       name:\"Test-Admin\"\n" 
     + "       }\n" + "  },\n" + "  {\n" + "   \"id\": \"17\",\n" 
     + "   \"userName\": \"Test2\",\n" + "   \"Group\": { id:1,\n" 
     + "       name:\"Test-Admin\"\n" + "       }\n" + "  },\n" 
     + "  {\n" + "   \"id\": \"32\",\n" + "   \"userName\": \"Test3\",\n" 
     + "   \"Group\": { id:1,\n" + "       name:\"Test-Admin\"\n" 
     + "       }\n" + "  },\n" + "  {\n" + "   \"id\": \"35\",\n" 
     + "   \"userName\": \"Test4\",\n" + "   \"Group\": { id:1,\n" 
     + "       name:\"Test-Admin\"\n" + "       }\n" + "  } \n" 
     + "\n" + " ]\n" + " }"); 

JSONArray array = json.getJSONArray("users"); 

String userName = "Test1"; 
Integer userId = null; 

for (int i = 0; i < array.length() && userId == null; i++) { 

    JSONObject jsonIn = (JSONObject) array.get(i); 

    if (jsonIn.optString("userName").equals(userName)) { 
     userId = jsonIn.optInt("id"); 
    } 
} 

System.out.println("User ID for User Name '" + userName + "' is : " + userId); 
+0

ありがとうございました。また、これらのJSON文字列のユーザーリストを表形式で解析する方法はありますか? –

+0

JSONは半構造化されたデータ型です。 SQLからの結果セットのように構造化されていません。 JSONは、'を表形式に収めたオブジェクトまたは配列をネストしている場合があります。構造体があらかじめ定義されている場合にのみ、表形式を作成することができます。 –

0

jsonObj.getJsonArray( "ユーザー")と、その後は配列をリストに変換します。 Java 8 StreamおよびFilter APIを使用して、目的の出力を抽出します。

1

私は、apache http apiで構築されたhttp-requestを使用することをおすすめします。応答を解析するには、ResponseDataクラスを作成する必要があります。

private static final HttpRequest<ResponseData> HTTP_REQUEST = 
     HttpRequestBuilder.createGet(yourUri, ResponseData.class).build(); 

    public void test() { 
    HTTP_REQUEST.execute().ifHasContent(responseData -> { 
     Optional<User> foundedUser = responseData.getUsers() 
       .stream() 
       .filter(user -> "Test1".equals(user.getUserName())) 
       .findFirst(); 
     foundedUser.ifPresent(user -> System.out.println(user.getId())); 
     }); 
    } 

    class ResponseData { 
    private int displayLength; 
    private int iTotal; 
    private List<User> users; 

    public int getDisplayLength() { 
     return displayLength; 
    } 

    public void setDisplayLength(int displayLength) { 
     this.displayLength = displayLength; 
    } 

    public int getiTotal() { 
     return iTotal; 
    } 

    public void setiTotal(int iTotal) { 
     this.iTotal = iTotal; 
    } 

    public List<User> getUsers() { 
     return users; 
    } 

    public void setUsers(List<User> users) { 
     this.users = users; 
    } 
} 

class User { 
    private int id; 
    private String userName; 
    private Group Group; 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getUserName() { 
     return userName; 
    } 

    public void setUserName(String userName) { 
     this.userName = userName; 
    } 

    public Group getGroup() { 
     return Group; 
    } 

    public void setGroup(Group group) { 
     Group = group; 
    } 
} 

class Group { 
    private int id; 
    private String name; 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

注:お客様のjsonは間違っています。参照してください修正:

{ 
    "displayLength": "4", 
    "iTotal": "20", 
    "users": [ 
    { 
     "id": "2", 
     "userName": "Test1", 
     "Group": { 
     "id": 1, 
     "name": "Test-Admin" 
     } 
    }, 
    { 
     "id": "17", 
     "userName": "Test2", 
     "Group": { 
     "id": 1, 
     "name": "Test-Admin" 
     } 
    }, 
    { 
     "id": "32", 
     "userName": "Test3", 
     "Group": { 
     "id": 1, 
     "name": "Test-Admin" 
     } 
    }, 
    { 
     "id": "35", 
     "userName": "Test4", 
     "Group": { 
     "id": 1, 
     "name": "Test-Admin" 
     } 
    } 
    ] 
} 
関連する問題