JSON转CSV:使用Java处理复杂数据结构

本文介绍了如何使用Java和Jackson库配合ApacheCommonsCSV将嵌套的JSON数据转换为CSV格式,包括所需库的引入、JSON文件示例以及完整的代码实现。此技巧在数据处理和分析中十分实用。
摘要由CSDN通过智能技术生成

引言

在数据处理和分析的世界中,经常需要将数据从一种格式转换为另一种更便于处理或分析的格式。本文将详细介绍如何使用Java语言,配合Jackson和Apache Commons CSV库,将嵌套的JSON数据转换成CSV格式。这种技能在数据科学、软件开发和系统集成等领域非常有用。

准备工作

首先,确保你的Java项目中引入了必要的库。如果你使用Maven作为项目管理工具,可以在pom.xml文件中添加以下依赖:

xml

<!-- Jackson for JSON processing -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.12.3</version>
</dependency>

<!-- Apache Commons CSV for CSV writing -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-csv</artifactId>
    <version>1.8</version>
</dependency>

示例JSON文件

假设我们有一个名为response.json的文件,其内容如下:

json

{
  "code": 0,
  "data": {
    "page": {
      "prePage": 1,
      "nextPage": 1,
      "pageNo": 1,
      "pageSize": 10,
      "totalPage": 1,
      "totalCount": 10
    },
    "statList": [
      {
        "statDate": "2023-12-31",
        // 其他字段
      }
      // 更多数据项...
    ]
  }
}

Java代码实现

我们的目标是读取statList中的数据,并将其转换为CSV格式。下面是完整的Java代码实现:

java

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class JsonToCsvConverter {
    public static void main(String[] args) {
        String jsonFilePath = "response.json";
        String csvFilePath = "output.csv";

        ObjectMapper mapper = new ObjectMapper();
        try (FileReader fileReader = new FileReader(jsonFilePath);
             FileWriter fileWriter = new FileWriter(csvFilePath);
             CSVPrinter csvPrinter = new CSVPrinter(fileWriter, CSVFormat.DEFAULT.withHeader(
                    "statDate", "platformName", "pageName", "positionName", "productionName", "orderName", 
                    "orgName", "inventory", "backendExposurePv", "fillRate", "frontExposurePv", "clickPv", 
                    "backendClickPv", "clickRate", "orderType"))) {

            JsonNode rootNode = mapper.readTree(fileReader);
            JsonNode dataNode = rootNode.path("data");
            JsonNode statList = dataNode.path("statList");
            int count = 0;

            if (statList.isArray()) {
                for (JsonNode node : statList) {
                    List<String> csvData = new ArrayList<>();
                    // 添加数据到csvData列表
                    csvData.add(node.path("statDate").asText(""));
                    // ... 其他字段处理

                    csvPrinter.printRecord(csvData);
                    count++;
                }
            }

            csvPrinter.flush();
            System.out.println("CSV文件已生成!");
            System.out.println("原始数据中共有 " + count + " 条数据。");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

结论

通过上述步骤,我们不仅学会了如何处理和转换嵌套的JSON数据,还确保了数据的完整性和灵活性。这种技能对于处理复杂的数据结构非常重要,可以广泛应用于多种业务和技术场景中。

后续步骤

为了进一步提高效率和可读性,可以考虑添加异常处理和数据验证的逻辑,确保在处理大量或复杂数据时的健壮性。

如果你有任何问题或需要进一步的帮助,请随时留言或联系我。 😄👨‍💻

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值