首页 文章

将unirest字符串响应放入hashmap

提问于
浏览
1

我有一个来自我发出的最不正确请求的字符串响应,我想知道是否可以将结果放入HashMap以便更容易地访问响应字段 . 任何建议都会有所帮助 .

以下是响应的示例:

{
    "access_token":"HzDzAtlom6CDqRa0zPetH09hZbDr8tm__hPw7aCx2m0h0gnGwHMaKvBEp64sHRUCJJEAlhCNUqQ3tBSyvod_93gTnt145W2ly9KKw5ISmaZRN75O9NUfJUGPRd0LH87LlxiRgHNFkUGTUDwyJOmhYNajj7TQoncxqkfc3jxL-jEi3Ea1cGRvOSmLH5Aqom81kKmiRzPV_Ss0xwFWjQVsS03y_P720Hv1BQEayO9L7Vic4A64GmXm3PlFQuwcvOk3M_7WOa_EEGOFBZdhwn7dzNQ7gypJ27MSTOD3gI57880unF4XFgTT_H4p4G5V6C8L8yRbRNXPIe80gLKYk3F3nw",
    "token_type":"bearer",
    "expires_in":3599,
    "refresh_token":"f87a5fea7d764826be24bd742626d0d8",
    "as:client_id":"paymentApp",
    "username":"savemore01",
    ".issued":"Wed, 05 Dec 2018 03:13:23 GMT",
    ".expires":"Wed, 05 Dec 2018 04:13:23 GMT"
}

我尝试使用逗号(,)作为分隔符使用拆分,但日期和时间字段搞砸了 . 我希望有人可以提供帮助 .

2 回答

  • 1

    ObjectMapper是一个非常方便的帮助器,用于在对象和字符串之间进行转换 .

    1) Parsing json string to hashmap:

    @Test
    public void it_should_test() throws IOException {
        //Given
        String str = "{\n" +
                "    \"access_token\":\"HzDzAtlom6CDqRa0zPetH09hZbDr8tm__hPw7aCx2m0h0gnGwHMaKvBEp64sHRUCJJEAlhCNUqQ3tBSyvod_93gTnt145W2ly9KKw5ISmaZRN75O9NUfJUGPRd0LH87LlxiRgHNFkUGTUDwyJOmhYNajj7TQoncxqkfc3jxL-jEi3Ea1cGRvOSmLH5Aqom81kKmiRzPV_Ss0xwFWjQVsS03y_P720Hv1BQEayO9L7Vic4A64GmXm3PlFQuwcvOk3M_7WOa_EEGOFBZdhwn7dzNQ7gypJ27MSTOD3gI57880unF4XFgTT_H4p4G5V6C8L8yRbRNXPIe80gLKYk3F3nw\",\n" +
                "    \"token_type\":\"bearer\",\n" +
                "    \"expires_in\":3599,\n" +
                "    \"refresh_token\":\"f87a5fea7d764826be24bd742626d0d8\",\n" +
                "    \"as:client_id\":\"paymentApp\",\n" +
                "    \"username\":\"savemore01\",\n" +
                "    \".issued\":\"Wed, 05 Dec 2018 03:13:23 GMT\",\n" +
                "    \".expires\":\"Wed, 05 Dec 2018 04:13:23 GMT\"\n" +
                "}";
    
        //When
        Map<String, Object> response = new ObjectMapper().readValue(str, HashMap.class);
    
        //Then
        assertThat(response.get("access_token")).isEqualTo("HzDzAtlom6CDqRa0zPetH09hZbDr8tm__hPw7aCx2m0h0gnGwHMaKvBEp64sHRUCJJEAlhCNUqQ3tBSyvod_93gTnt145W2ly9KKw5ISmaZRN75O9NUfJUGPRd0LH87LlxiRgHNFkUGTUDwyJOmhYNajj7TQoncxqkfc3jxL-jEi3Ea1cGRvOSmLH5Aqom81kKmiRzPV_Ss0xwFWjQVsS03y_P720Hv1BQEayO9L7Vic4A64GmXm3PlFQuwcvOk3M_7WOa_EEGOFBZdhwn7dzNQ7gypJ27MSTOD3gI57880unF4XFgTT_H4p4G5V6C8L8yRbRNXPIe80gLKYk3F3nw");
        assertThat(response.get("expires_in")).isEqualTo(3599);
        assertThat(response.get("token_type")).isEqualTo("bearer");
        assertThat(response.get("refresh_token")).isEqualTo("f87a5fea7d764826be24bd742626d0d8");
        assertThat(response.get("as:client_id")).isEqualTo("paymentApp");
        assertThat(response.get(".issued")).isEqualTo("Wed, 05 Dec 2018 03:13:23 GMT");
        assertThat(response.get(".expires")).isEqualTo("Wed, 05 Dec 2018 04:13:23 GMT");
    }
    

    2) Parsing json string to object:

    a)Resposne类:

    public class Response {
    
        @JsonProperty("access_token")
        private String accessToken;
        @JsonProperty("token_type")
        private String tokenType;
        @JsonProperty("expires_in")
        private Long expiresIn;
        @JsonProperty("refresh_token")
        private String refreshToken;
        @JsonProperty("as:client_id")
        private String clientId;
        @JsonProperty("username")
        private String username;
        @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "EEE, dd MMM yyyy HH:mm:ss zzz")
        @JsonProperty(".issued")
        private Date issued;
        @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "EEE, dd MMM yyyy HH:mm:ss zzz")
        @JsonProperty(".expires")
        private Date expires;
    
        public String getAccessToken() {
            return accessToken;
        }
    
        public void setAccessToken(String accessToken) {
            this.accessToken = accessToken;
        }
    
        public String getTokenType() {
            return tokenType;
        }
    
        public void setTokenType(String tokenType) {
            this.tokenType = tokenType;
        }
    
        public Long getExpiresIn() {
            return expiresIn;
        }
    
        public void setExpiresIn(Long expiresIn) {
            this.expiresIn = expiresIn;
        }
    
        public String getRefreshToken() {
            return refreshToken;
        }
    
        public void setRefreshToken(String refreshToken) {
            this.refreshToken = refreshToken;
        }
    
        public String getClientId() {
            return clientId;
        }
    
        public void setClientId(String clientId) {
            this.clientId = clientId;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public Date getIssued() {
            return issued;
        }
    
        public void setIssued(Date issued) {
            this.issued = issued;
        }
    
        public Date getExpires() {
            return expires;
        }
    
        public void setExpires(Date expires) {
            this.expires = expires;
        }
    }
    

    b)解析:

    @Test
    public void it_should_test_2() throws IOException, ParseException {
        //Given
        String str = "{\n" +
                "    \"access_token\":\"HzDzAtlom6CDqRa0zPetH09hZbDr8tm__hPw7aCx2m0h0gnGwHMaKvBEp64sHRUCJJEAlhCNUqQ3tBSyvod_93gTnt145W2ly9KKw5ISmaZRN75O9NUfJUGPRd0LH87LlxiRgHNFkUGTUDwyJOmhYNajj7TQoncxqkfc3jxL-jEi3Ea1cGRvOSmLH5Aqom81kKmiRzPV_Ss0xwFWjQVsS03y_P720Hv1BQEayO9L7Vic4A64GmXm3PlFQuwcvOk3M_7WOa_EEGOFBZdhwn7dzNQ7gypJ27MSTOD3gI57880unF4XFgTT_H4p4G5V6C8L8yRbRNXPIe80gLKYk3F3nw\",\n" +
                "    \"token_type\":\"bearer\",\n" +
                "    \"expires_in\":3599,\n" +
                "    \"refresh_token\":\"f87a5fea7d764826be24bd742626d0d8\",\n" +
                "    \"as:client_id\":\"paymentApp\",\n" +
                "    \"username\":\"savemore01\",\n" +
                "    \".issued\":\"Wed, 05 Dec 2018 03:13:23 GMT\",\n" +
                "    \".expires\":\"Wed, 05 Dec 2018 04:13:23 GMT\"\n" +
                "}";
    
        //When
        Response response = new ObjectMapper().readValue(str, Response.class);
    
        //Then
        assertThat(response.getAccessToken()).isEqualTo("HzDzAtlom6CDqRa0zPetH09hZbDr8tm__hPw7aCx2m0h0gnGwHMaKvBEp64sHRUCJJEAlhCNUqQ3tBSyvod_93gTnt145W2ly9KKw5ISmaZRN75O9NUfJUGPRd0LH87LlxiRgHNFkUGTUDwyJOmhYNajj7TQoncxqkfc3jxL-jEi3Ea1cGRvOSmLH5Aqom81kKmiRzPV_Ss0xwFWjQVsS03y_P720Hv1BQEayO9L7Vic4A64GmXm3PlFQuwcvOk3M_7WOa_EEGOFBZdhwn7dzNQ7gypJ27MSTOD3gI57880unF4XFgTT_H4p4G5V6C8L8yRbRNXPIe80gLKYk3F3nw");
        assertThat(response.getExpiresIn()).isEqualTo(3599L);
        assertThat(response.getTokenType()).isEqualTo("bearer");
        assertThat(response.getRefreshToken()).isEqualTo("f87a5fea7d764826be24bd742626d0d8");
        assertThat(response.getClientId()).isEqualTo("paymentApp");
        assertThat(response.getIssued()).isEqualTo(DateUtils.parseDate("Wed, 05 Dec 2018 03:13:23 GMT", "EEE, dd MMM yyyy HH:mm:ss zzz"));
        assertThat(response.getExpires()).isEqualTo(DateUtils.parseDate("Wed, 05 Dec 2018 04:13:23 GMT", "EEE, dd MMM yyyy HH:mm:ss zzz"));
    }
    

    请注意,我们可以使用JsonFormat注释轻松地将具有任何所需模式的日期值应用到Date字段中 .

  • 1

    根据您使用的技术,Unirest提供开箱即用的解析功能 . 可以在此处找到以下示例:http://unirest.io/java.html

    // Response to Object
    HttpResponse<Book> bookResponse = 
    Unirest.get("http://httpbin.org/books/1").asObject(Book.class);
    Book bookObject = bookResponse.getBody();
    

相关问题