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

Java中如何将多行分隔的HashMap数据字符串转换为JSONObject或HashMap

问题根因

你当前拿到的数据是**行式JSON(JSON Lines)**格式,每一行是独立的合法JSON对象,但整段字符串没有用方括号包裹为JSON数组、对象之间也没有逗号分隔,不符合标准JSON语法,所以直接解析整串会报错。

可行解决思路

方案1:按行逐行解析(推荐,无需修改原始数据)

你可以先把整段字符串按换行符切割为独立的行,逐行用Gson解析每个单独的JSON对象,最后汇总到集合里即可,示例代码如下:

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

// 假设原始数据字符串为rawData
String[] lineArr = rawData.split("\\R"); // 适配所有换行符(\n、\r\n等)
Gson gson = new Gson();
List<HashMap<String, Object>> resultList = new ArrayList<>();
for (String line : lineArr) {
    // 跳过空行避免解析错误
    if (line.trim().isEmpty()) {
        continue;
    }
    HashMap<String, Object> item = gson.fromJson(line, new TypeToken<HashMap<String, Object>>(){}.getType());
    resultList.add(item);
}

最终resultList中就存储了所有行对应的HashMap数据。

方案2:将原始数据拼接为合法JSON数组再解析

如果不想逐行处理,也可以对原始字符串做简单改造,把它转换为标准JSON数组格式后再一次性解析:

// 给整段数据外层加方括号,把换行符替换为逗号,拼接为标准JSON数组
String jsonArrayStr = "[" + String.join(",", rawData.split("\\R")) + "]";
Gson gson = new Gson();
List<HashMap<String, Object>> resultList = gson.fromJson(jsonArrayStr, new TypeToken<List<HashMap<String, Object>>>(){}.getType());

注意:这个方案仅适用于每行都是完整JSON对象、无多余空行的场景,如果原始数据存在空行需要先过滤再拼接。

额外说明

后续遇到同类每行一条JSON的输入时,优先选择逐行解析的方案,容错性更高,遇到某行格式错误可以单独跳过,不会影响其他行的数据解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:36:01