如何从输入读取多个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
相关产品推荐
相关产品推荐

