You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Java解析网站JSON?含指定API的下载与直接解析方法

Hey there! 你这个需求在Java开发里挺常见的,我给你分两种场景来详细说明:一种是直接从API接口实时解析JSON数据,另一种是先把JSON内容保存到本地文件,之后再读取解析。咱们一步步来~

一、直接从网络解析JSON数据

我推荐使用Jackson这个流行的JSON处理库,它能轻松把JSON字符串映射成Java对象,非常省心。

1. 添加Jackson依赖

如果你用Maven,在pom.xml里加入以下依赖(用最新稳定版即可):

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

如果你用Gradle,就在build.gradle里加:

implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2'

2. 编写实体类映射JSON结构

先看一下目标API返回的JSON格式:

{"status":true,"data":0.0}

我们需要创建一个Java类来对应这个结构,字段名要和JSON的key对应(或者用@JsonProperty注解指定):

import com.fasterxml.jackson.annotation.JsonProperty;

public class NanopoolBalanceResponse {
    private boolean status;
    @JsonProperty("data") // 这里可以省略,因为字段名和JSON key一致,仅作注解用法演示
    private double balance;

    // Getter和Setter方法
    public boolean isStatus() {
        return status;
    }

    public void setStatus(boolean status) {
        this.status = status;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }
}

3. 编写解析代码

用Java 11+自带的HttpClient发送请求,再用Jackson的ObjectMapper解析响应:

import com.fasterxml.jackson.databind.ObjectMapper;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class DirectJsonParser {
    public static void main(String[] args) {
        String apiUrl = "https://api.nanopool.org/v1/etn/balance/etnkGqH26XNVZ9cJv7jh95Dwj7LYPupYX5F5QVf85icHXq2sRJcXSxDT6SL4gD2Vn1WBKi5wqd9x5En2LLmDhnKs8pqrcM75VJ";
        
        // 初始化HttpClient和ObjectMapper
        HttpClient httpClient = HttpClient.newHttpClient();
        ObjectMapper objectMapper = new ObjectMapper();
        
        try {
            // 构建GET请求
            HttpRequest request = HttpRequest.newBuilder()
                    .uri(URI.create(apiUrl))
                    .GET()
                    .build();
            
            // 发送请求并获取响应字符串
            HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
            
            // 把JSON字符串映射成Java对象
            NanopoolBalanceResponse balanceResponse = objectMapper.readValue(response.body(), NanopoolBalanceResponse.class);
            
            // 处理结果
            if (balanceResponse.isStatus()) {
                System.out.println("当前ETN余额: " + balanceResponse.getBalance());
            } else {
                System.out.println("API请求失败");
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
二、先保存JSON到本地文件,再解析

如果需要把API返回的JSON持久化到本地,之后再读取解析,可以在上面的代码基础上添加文件读写逻辑:

1. 保存JSON到本地文件

在获取到response.body()之后,用FileWriter把JSON字符串写入文件:

import java.io.FileWriter;
import java.io.IOException;

// 放在解析代码的try块里,获取response之后
try (FileWriter writer = new FileWriter("nanopool_balance.json")) {
    writer.write(response.body());
    System.out.println("JSON文件已成功保存到本地目录");
} catch (IOException e) {
    e.printStackTrace();
}

2. 读取本地文件解析

用Jackson的ObjectMapper直接读取本地文件并映射成Java对象:

import java.io.File;

// 可以单独写方法,或者放在main方法里
try {
    NanopoolBalanceResponse savedResponse = objectMapper.readValue(new File("nanopool_balance.json"), NanopoolBalanceResponse.class);
    System.out.println("从本地文件读取的余额: " + savedResponse.getBalance());
} catch (IOException e) {
    e.printStackTrace();
}
三、原生方式(不依赖第三方库)

如果你不想引入第三方库,也可以用Java原生的HttpURLConnection获取响应,再结合org.json包(需要单独导入依赖)手动解析JSON节点。这种方式适合简单的JSON结构,复杂场景会比较繁琐:

首先添加org.json依赖(Maven):

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20230618</version>
</dependency>

然后编写解析代码:

import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class NativeJsonParser {
    public static void main(String[] args) {
        String apiUrl = "https://api.nanopool.org/v1/etn/balance/etnkGqH26XNVZ9cJv7jh95Dwj7LYPupYX5F5QVf85icHXq2sRJcXSxDT6SL4gD2Vn1WBKi5wqd9x5En2LLmDhnKs8pqrcM75VJ";
        
        try {
            URL url = new URL(apiUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            
            // 读取响应内容
            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line;
            StringBuilder response = new StringBuilder();
            
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
            reader.close();
            
            // 手动解析JSON节点
            JSONObject jsonObject = new JSONObject(response.toString());
            boolean status = jsonObject.getBoolean("status");
            double balance = jsonObject.getDouble("data");
            
            if (status) {
                System.out.println("当前ETN余额: " + balance);
            } else {
                System.out.println("请求失败");
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

内容的提问来源于stack exchange,提问作者romainlavisse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:34:30