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

如何从输入读取多个JSON数组并转换为Java数组或List

在Java中读取包含多个顶级JSON数组的字符串

你的输入是多个顶级JSON数组直接拼接的格式,这种格式不符合标准JSON规范(标准JSON仅允许一个顶级元素),所以常规解析方法只会读取第一个数组。下面提供两种常用库的解决思路:

一、使用JSON-Java(org.json)库

通过JSONTokener逐个解析数组,直到耗尽输入内容:

import org.json.JSONArray;
import org.json.JSONTokener;

public class MultiJsonArrayReader {
    public static void main(String[] args) {
        String json = "[{\"operation\":\"buy\", \"unit-cost\":10.00, \"quantity\": 10000},\n" +
                      "{\"operation\":\"sell\", \"unit-cost\":20.00, \"quantity\": 5000}]\n" +
                      "[{\"operation\":\"buy\", \"unit-cost\":20.00, \"quantity\": 10000},\n" +
                      "{\"operation\":\"sell\", \"unit-cost\":10.00, \"quantity\": 5000}]";

        JSONTokener tokener = new JSONTokener(json);
        while (tokener.more()) {
            // 跳过数组之间的空白字符(换行、空格等)
            tokener.skipTo('[');
            if (tokener.more()) {
                JSONArray array = new JSONArray(tokener);
                System.out.println("解析到数组:" + array.toString());
            }
        }
    }
}

二、使用Jackson库

利用Jackson的流式解析API,逐个识别并读取数组:

import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;

public class JacksonMultiArrayReader {
    public static void main(String[] args) throws IOException {
        String json = "[{\"operation\":\"buy\", \"unit-cost\":10.00, \"quantity\": 10000},\n" +
                      "{\"operation\":\"sell\", \"unit-cost\":20.00, \"quantity\": 5000}]\n" +
                      "[{\"operation\":\"buy\", \"unit-cost\":20.00, \"quantity\": 10000},\n" +
                      "{\"operation\":\"sell\", \"unit-cost\":10.00, \"quantity\": 5000}]";

        ObjectMapper mapper = new ObjectMapper();
        JsonFactory factory = mapper.getFactory();
        try (JsonParser parser = factory.createParser(json)) {
            while (!parser.isClosed()) {
                JsonToken token = parser.nextToken();
                if (JsonToken.START_ARRAY.equals(token)) {
                    // 解析当前数组
                    Object[] array = parser.readValueAs(Object[].class);
                    System.out.println("解析到数组:" + mapper.writeValueAsString(array));
                }
            }
        }
    }
}

额外建议

这种多顶级数组的格式属于非标准JSON,如果有修改输入格式的权限,建议改为外层包裹一个数组的标准格式(比如[ [...], [...] ]),后续解析会更简便。

内容的提问来源于stack exchange,提问作者Edder Javier Peña Barranco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 12:45:06