2017-09-16 10 views
0

모든,요청 후 JSON 배열

에서 정보를 당겨 나는 다음과 같은 한 JSON 응답은 사용자의 목록을 가져옵니다. userName을 사용하여 하나의 사용자 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

저는 http-request을 apache http api에서 사용하도록 권장합니다. 응답을 구문 분석하려면 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" 
     } 
    } 
    ] 
}