如何使用JAVA解析https://iplist.cc/api的JSON数据并提取countryname值
你代码存在的问题
- 用了早已弃用的
DefaultHttpClient类,该类属于Apache HttpClient组件,普通JavaSE高版本、Android新版本均已不再内置该类,运行直接报类找不到错误 - 接口
https://iplist.cc/api仅支持GET请求,你用了HttpPost发请求,会被接口拒绝返回错误 Log类是Android平台特有API,普通Java项目没有该类,编译直接报错- 代码语法不完整:调用逻辑块的大括号不匹配,
country变量未提前声明就直接赋值 - 未判断HTTP响应状态码,即使接口返回4xx/5xx错误也强行解析内容,会出现JSON解析异常
- 静态变量使用不当:请求相关对象设为静态值,多次调用会出现数据覆盖、线程安全问题
修复后的完整可运行代码(基于JDK11+自带HttpClient,无需额外导HTTP相关包)
import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import org.json.JSONObject; public class IpCountryParser { private static final String API_URL = "https://iplist.cc/api"; private static final String COUNTRY_FIELD = "countryname"; public static void main(String[] args) { try { // 构建HTTP客户端和GET请求 HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(API_URL)) .GET() .build(); // 发送请求获取字符串响应 HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); // 判断请求是否成功 if (response.statusCode() != 200) { System.out.println("请求失败,状态码:" + response.statusCode()); return; } // 解析JSON提取国家名称 JSONObject json = new JSONObject(response.body()); String countryName = json.getString(COUNTRY_FIELD); // 直接输出国家名 System.out.println(countryName); } catch (Exception e) { e.printStackTrace(); } } }
依赖补充说明
如果运行时提示找不到org.json.JSONObject类,在Maven项目的pom.xml里添加如下依赖即可:
<dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20240303</version> </dependency>
内容的提问来源于stack exchange,提问作者ejade
相关产品推荐
相关产品推荐

