如何在Java中实现JSON转固定长度平面文件?有哪些可用类库?
Java实现JSON转固定宽度平面文件的常用方案
可选类库
- 基础组合方案:
Jackson/Gson(解析JSON) +Apache Commons Lang(处理字符串固定长度补位)
适合需求简单的场景,学习成本低,不需要引入额外的重型框架 - JRecord:专门处理平面文件的专用类库,原生支持固定宽度字段规则配置,支持字段对齐、填充字符自定义、不同编码处理等进阶需求
- Spring Batch FixedLengthFieldExtractor:如果你项目本身用Spring技术栈,可直接用Spring Batch提供的固定宽度文件生成组件,不需要额外引入依赖
最简实现示例(Jackson + Apache Commons Lang)
首先引入依赖(Maven格式):
<!-- Jackson 解析JSON --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency> <!-- Commons Lang 处理字符串补位 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.14.0</version> </dependency>
示例代码:
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.lang3.StringUtils; import java.io.FileWriter; import java.io.IOException; public class FixedWidthGenerator { public static void main(String[] args) throws IOException { // 1. 解析JSON文件 ObjectMapper objectMapper = new ObjectMapper(); JsonNode rootNode = objectMapper.readTree(FixedWidthGenerator.class.getResourceAsStream("/input.json")); JsonNode employeeNode = rootNode.get("employee"); // 2. 按规则处理每个字段:左对齐,不足长度用'-'填充 String name = StringUtils.rightPad(employeeNode.get("name").asText(), 10, '-'); String salary = StringUtils.rightPad(employeeNode.get("salary").asText(), 5, '-'); // 3. 拼接后写入文件 String result = name + salary; try (FileWriter writer = new FileWriter("output.txt")) { writer.write(result); } } }
上述代码运行后生成的output.txt内容和你示例要求完全一致。
注意事项
- 如果需要右对齐的固定宽度,可以把
StringUtils.rightPad替换为StringUtils.leftPad - 填充字符可根据需求自定义,比如空格、0等
- 字段顺序需要你自己按照业务要求指定,避免JSON字段顺序变化导致输出错位
内容的提问来源于stack exchange,提问作者swathi
相关产品推荐
相关产品推荐

