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,提问作者甄士隐
相关产品推荐
相关产品推荐

