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

JSON新手求助:Java如何解析服务器返回的指定JSON并提取记录

在Java中解析JSON并提取hq数组记录的解决方案

嘿,作为JSON新手完全不用慌!我来一步步带你搞定这个问题——把从服务器拿到的JSON数据解析出来,并且提取出hq数组里的两条记录。下面我会用两种常用的Java JSON处理方式来演示,你可以选自己觉得顺手的来用。


方法一:用Jackson库(推荐,更适合结构化数据)

Jackson是Java生态里最流行的JSON处理库之一,它可以把JSON直接映射成Java对象,处理起来很规整。

1. 先添加依赖

如果你用Maven,在pom.xml里加这段依赖:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version> <!-- 用最新稳定版就行 -->
</dependency>

2. 创建对应的数据实体类

我们先定义一个Java类,和JSON的结构对应上,这样Jackson就能自动帮我们映射数据了:

import java.util.List;

public class StockResponse {
    private int status;
    private List<List<String>> hq;
    private String code;
    private List<Object> stat;

    // 必须要有无参构造器,Jackson需要它来创建对象
    public StockResponse() {}

    // Getter方法,用来获取hq数据
    public List<List<String>> getHq() {
        return hq;
    }

    // 其他字段的Getter/Setter可以按需添加,这里只需要hq的话也可以只写这个
    public void setHq(List<List<String>> hq) {
        this.hq = hq;
    }

    public int getStatus() {
        return status;
    }

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

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public List<Object> getStat() {
        return stat;
    }

    public void setStat(List<Object> stat) {
        this.stat = stat;
    }
}

3. 解析JSON并提取hq数据

接下来写解析的代码,把JSON字符串转换成我们的实体类,然后取出hq数组:

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonParserDemo {
    public static void main(String[] args) {
        // 你的JSON字符串,注意转义双引号
        String jsonStr = "[{\"status\":0,\"hq\":[[\"2018-04-20\",\"11.51\",\"11.35\",\"-0.12\",\"-1.05%\",\"11.20\",\"11.58\",\"958691\",\"109080.12\",\"0.57%\"],[\"2018-04-19\",\"11.52\",\"11.47\",\"-0.03\",\"-0.26%\",\"11.42\",\"11.69\",\"849132\",\"97959.35\",\"0.50%\"]],\"code\":\"cn_000001\",\"stat\":[\"累计:\",\"2018-04-19至2018-04-20\",\"-0.15\",\"-1.30%\",11.2,11.69,1807823,207039.47,\"1.07%\"]}]";

        try {
            ObjectMapper objectMapper = new ObjectMapper();
            // 因为你的JSON最外层是数组,所以我们转成StockResponse的数组
            StockResponse[] responses = objectMapper.readValue(jsonStr, StockResponse[].class);
            
            // 取数组里的第一个对象(你的数据里只有一个)
            StockResponse response = responses[0];
            // 获取hq数组
            List<List<String>> hqList = response.getHq();
            
            // 遍历打印两条记录,验证一下
            for (List<String> record : hqList) {
                System.out.println("日期:" + record.get(0) + ",开盘价:" + record.get(1) + ",收盘价:" + record.get(2));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

方法二:用org.json库(轻量,适合快速解析)

如果不想写实体类,也可以用org.json库直接手动解析JSON结构,适合简单场景。

1. 添加依赖

Maven依赖:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20230618</version> <!-- 最新稳定版 -->
</dependency>

2. 解析代码

直接操作JSON对象和数组:

import org.json.JSONArray;
import org.json.JSONObject;

public class SimpleJsonParser {
    public static void main(String[] args) {
        String jsonStr = "[{\"status\":0,\"hq\":[[\"2018-04-20\",\"11.51\",\"11.35\",\"-0.12\",\"-1.05%\",\"11.20\",\"11.58\",\"958691\",\"109080.12\",\"0.57%\"],[\"2018-04-19\",\"11.52\",\"11.47\",\"-0.03\",\"-0.26%\",\"11.42\",\"11.69\",\"849132\",\"97959.35\",\"0.50%\"]],\"code\":\"cn_000001\",\"stat\":[\"累计:\",\"2018-04-19至2018-04-20\",\"-0.15\",\"-1.30%\",11.2,11.69,1807823,207039.47,\"1.07%\"]}]";

        // 最外层是JSON数组,先创建JSONArray对象
        JSONArray jsonArray = new JSONArray(jsonStr);
        // 取第一个元素,是JSONObject
        JSONObject jsonObject = jsonArray.getJSONObject(0);
        
        // 获取hq对应的JSONArray
        JSONArray hqArray = jsonObject.getJSONArray("hq");
        
        // 遍历hq数组里的两条记录
        for (int i = 0; i < hqArray.length(); i++) {
            JSONArray record = hqArray.getJSONArray(i);
            // 可以按索引取出每个字段,比如索引0是日期,1是开盘价等等
            System.out.println("第" + (i+1) + "条记录:");
            System.out.println("日期:" + record.getString(0));
            System.out.println("开盘价:" + record.getString(1));
            System.out.println("收盘价:" + record.getString(2));
            System.out.println("-------------------");
        }
    }
}

这两种方法都能轻松提取出hq数组里的两条记录,新手可以先从方法二开始试,不用写实体类更直观;如果以后要处理更复杂的JSON,方法一的实体类方式会更易维护。

内容的提问来源于stack exchange,提问作者甄士隐

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:51:09