如何从 HTTP 响应中获取 JSON 值? [关闭]

问题描述 投票:0回答:3

我想从 HTTP 请求中检索 JSON 文件的值。不幸的是,我不知道如何进行。 我正在使用 GET 方法:

CloseableHttpClient client = HttpClientBuilder.create().build();
HttpGet get = new HttpGet(new URI("http://localhost:3333/command/core/get-csrf-token"));
HttpEntity entity = client.execute(get).getEntity();

我在尝试时确实得到了预期的文件:

return EntityUtils.toString(entity);

并得到输出:

{"token":"myToken"}

java json http get
3个回答
2
投票

您可以将 JSON 字符串转换为

JSONObject
(来自 org.json),然后使用
getString()
方法获取令牌

JSONObject result = new JSONObject(EntityUtils.toString(entity));
String token = result.getString("token"); 

参考:http://stleary.github.io/JSON-java/org/json/JSONObject.html#JSONObject-java.lang.String-


0
投票

试试

JSONObject jsonObject = new JSONObject(EntityUtils.toString(entity));
String token = jsonObject.getString("token");

-1
投票

您可以简单地使用正则表达式(不需要额外的库)。

public static void main(String[] args){

    String json = "{\"token\":\"myToken\"}";

    System.out.println(extractToken(json));

}

public static String extractToken(String json){

    String regexToken = "(?:.*\\\"token\\\"\\s*:\\s*\\\")(?<token>.*?)(?:\\\".*)";
        
    Pattern patternToken = Pattern.compile(regexToken, Pattern.DOTALL);
    Matcher matcherToken = patternToken.matcher(json);
    
    if(matcherToken.matches()){
        return matcherToken.group("token");
    }else{
        return "token_not_found";
    }

}

这甚至适用于具有多个字段的 json。唯一的条件就是整个json中只有一个

token
字段

© www.soinside.com 2019 - 2024. All rights reserved.