从Json数组中提取信息

时间:2017-09-16 17:27:58

标签: java json gson httpclient apache-httpclient-4.x

所有

在请求获取用户列表后,我有以下JSON响应。我想使用userName只提取一个用户的id。例如,如果我想要userName Test1的id,该怎么做?任何帮助将不胜感激。

View

谢谢,

3 个答案:

答案 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);

答案 1 :(得分: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不正确。见Corrected:

{
  "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"
      }
    }
  ]
}

答案 2 :(得分:0)

jsonObj.getJsonArray(“users”)然后将数组转换为list。现在使用Java 8 Stream和Filter api来提取所需的输出。

相关问题