如何用Java将换行分隔JSON中data字段的map类型值序列化为字符串
Java实现NDJSON中data字段Map转JSON字符串方案
核心实现依赖Jackson JSON处理库完成,无需自定义转义逻辑,避免格式出错。
依赖引入(Maven)
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency>
核心实现代码
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class NdjsonDataFieldConverter { // 全局复用ObjectMapper实例 private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); public static void main(String[] args) throws IOException { // 替换为你的NDJSON文件路径 String inputFilePath = "input.ndjson"; try (BufferedReader reader = new BufferedReader(new FileReader(inputFilePath))) { String line; while ((line = reader.readLine()) != null) { // 跳过空行 if (line.trim().isEmpty()) continue; String convertedLine = convertLine(line); // 输出处理后的行,可自行改为写入文件 System.out.println(convertedLine); } } } private static String convertLine(String rawLine) throws JsonProcessingException { // 解析原始JSON行 JsonNode rootNode = OBJECT_MAPPER.readTree(rawLine); // 取出data节点 JsonNode dataNode = rootNode.get("data"); // 将data节点序列化为JSON字符串 String dataJsonStr = OBJECT_MAPPER.writeValueAsString(dataNode); // 替换原data字段为字符串类型 ((ObjectNode) rootNode).put("data", dataJsonStr); // 输出处理后的整行JSON return OBJECT_MAPPER.writeValueAsString(rootNode); } }
实现说明
- 逐行读取NDJSON文件,避免一次性加载大文件导致内存溢出
- 复用ObjectMapper实例,无需重复创建,性能更优
- Jackson会自动处理JSON字符串内部的双引号转义,无需手动处理,完全匹配期望输出格式
- 可根据需求调整输入输出来源,比如从网络流读取、写入目标文件等
内容的提问来源于stack exchange,提问作者Jianying Chiang
相关产品推荐
相关产品推荐

