Json是一种数据格式,通常用于传输数据。与之对应的,CSV也是一种数据格式,通常用于存储和分发数据。在Java中,我们可以使用一些工具库来将JSON读入内存并转换为CSV。
一个常用的Java工具库是Jackson,它提供了非常简单的API来读写JSON和CSV文件。以下是一个基本的例子:
ObjectMapper mapper = new ObjectMapper(); // JSON to CSV JsonNode node = mapper.readTree(new File("input.json")); CsvSchema.Builder csvSchemaBuilder = CsvSchema.builder(); JsonNode firstObject = node.elements().next(); firstObject.fieldNames().forEachRemaining(fieldName ->{csvSchemaBuilder.addColumn(fieldName);} ); CsvSchema csvSchema = csvSchemaBuilder.build().withHeader(); SequenceWriter writer = mapper.writerFor(JsonNode.class).with(csvSchema); writer.writeAll(node, new File("output.csv")); System.out.println("Conversion completed!"); // CSV to JSON CsvSchema csvSchema = CsvSchema.emptySchema().withHeader(); MappingIterator<Map<String, String>> iterator = new CsvMapper().readerFor(Map.class).with(csvSchema).readValues(new File("input.csv")); List<Map<String,String>> list = iterator.readAll(); ObjectNode rootNode = mapper.createObjectNode(); rootNode.putPOJO("data", list); mapper.writerWithDefaultPrettyPrinter().writeValue(new File("output.json"), rootNode); System.out.println("Conversion completed!");
在这个例子中,我们首先使用ObjectMapper读入JSON文件并将其转换为JsonNode对象。然后,我们使用CsvSchema.Builder构建CSV schema。通过枚举JsonNode对象的第一个元素的字段名,我们可以动态地构建CSV列。然后,我们使用SequenceWriter将JsonNode写入CSV文件。
要将CSV文件转换回JSON,我们使用CsvSchema也是很容易的。首先,我们通过CsvSchema.emptySchema().withHeader()来读取CSV文件并将其转换为MappingIterator<Map<String, String>>。然后,我们将Map列表转换为一个ObjectNode对象。最后,我们使用ObjectMapper来将ObjectNode写入JSON文件。
Jackson可是我们用于将JSON转换为CSV和CSV转换回JSON的有力工具。它非常简单易用,同时也是高性能和可预测的。