Java 处理 json 格式数据解析为 csv 格式

Java处理json格式数据解析为csv格式

如果不使用 JSON 工具库,你可以手动解析 JSON 格式字符串并将其转换为 CSV 格式字符串。
以下是一个简单示例,展示如何实现这一功能。

示例代码
下面的示例代码手动处理 JSON 字符串,将其转换为 CSV 格式字符串:

 /**
   * 接收 JSON 字符串,去掉开头和结尾的方括号,按对象划分。
   * 通过 extractKeys 方法提取字段名,添加到 CSV 的第一行。
   * 逐项解析 JSON 对象,并通过 extractValues 获取对应的值,添加到 CSV 的后续行。
   *
   * @param jsonString json格式字符串
   * @param header     输出是否包含头标题 true包含 false不包含
   * @return csv 格式字符串
   */
  public static String convertJsonToCsv(String jsonString, boolean header) {
    StringBuilder csvBuilder = new StringBuilder();

    // 假设 JSON 是一个数组的形式
    if (jsonString.startsWith("[") && jsonString.endsWith("]")) {
      // 去掉开头和结尾的方括号
      jsonString = jsonString.substring(1, jsonString.length() - 1).trim();
      String[] jsonObjects = jsonString.split("},\\s*\\{"); // 按对象划分

      // 处理第一项获取字段名
      if (header) {
        String[] keys = extractKeys(jsonObjects[0]);
        csvBuilder.append(String.join(",", keys)).append("\n");
      }
      // 逐个处理 JSON 对象
      for (String jsonObject : jsonObjects) {
        jsonObject = jsonObject.replaceAll("[{}\"]", ""); // 去掉大括号和双引号
        String[] values = extractValues(jsonObject);
        csvBuilder.append(String.join(",", values)).append("\n");
      }
    } else {
      // 处理第一项获取字段名
      if (header) {
        String[] keys = extractKeys(jsonString);
        csvBuilder.append(String.join(",", keys)).append("\n");
      }
      String[] values = extractValues(jsonString);
      csvBuilder.append(String.join(",", values)).append("\n");
    }
    return csvBuilder.substring(0, csvBuilder.length() - 1);
  }

  /**
   * 提取 JSON 对象的键,通过分隔符将 JSON 对象的属性解析成键的字符串数组。
   *
   * @param jsonString json格式字符串
   * @return JSON 对象的键
   */
  public static String[] extractKeys(String jsonString) {
    String[] parts = jsonString.split(",");
    String[] keys = new String[parts.length];

    for (int i = 0; i < parts.length; i++) {
      keys[i] = parts[i].split(":")[0].trim().replace("{", "").replace("}", "").replace("\"", "");
    }
    return keys;
  }

  /**
   * 提取 JSON 对象的键,通过分隔符将 JSON 对象的属性解析成键的字符串数组。
   *
   * @param jsonString json格式字符串
   * @return JSON 对象的键字符串
   */
  public static String extractKeysToString(String jsonString) {
    String[] values = extractKeys(jsonString);
    return String.join(",", values);
  }

  /**
   * 提取 JSON 对象的值,根据键的顺序,从 JSON 对象中对应地提取值。
   *
   * @param jsonString json格式字符串
   * @return JSON 对象的值
   */
  public static String[] extractValues(String jsonString) {
    String[] parts = jsonString.split(",");
    String[] values = new String[parts.length];

    for (int i = 0; i < parts.length; i++) {
      String value = parts[i].split(":")[1].trim().replace("{", "").replace("}", "").replace("\"", "");
      values[i] = value; // 此处直接取值,假设没有嵌套和特殊字符
    }
    return values;
  }

  /**
   * 提取 JSON 对象的值,根据键的顺序,从 JSON 对象中对应地提取值。
   *
   * @param jsonString json格式字符串
   * @return JSON 对象的值字符串
   */
  public static String extractValuesToString(String jsonString) {
    String[] values = extractValues(jsonString);
    return String.join(",", values);
  }

  public static void main(String[] args) {
    String json = "[{\"省份\":\"北京\",\"大学数量\":\"50\",\"大专数量\":\"80\",\"中专数量\":\"120\"}," +
        "{\"省份\":\"上海\",\"大学数量\":\"45\",\"大专数量\":\"75\",\"中专数量\":\"110\"}]";

    String string = "{\"省份\":\"北京\",\"大学数量\":\"50\",\"大专数量\":\"80\",\"中专数量\":\"120\"}";
    System.out.println(Arrays.toString(extractKeys(string)));
    System.out.println(Arrays.toString(extractValues(string)));
    System.out.println(extractKeysToString(string));
    System.out.println(extractValuesToString(string));
    String csvOutputWithHeader = convertJsonToCsv(json, true);
    System.out.println("csvOutputWithHeader:\n" + csvOutputWithHeader);
    String csvOutputNoHeader = convertJsonToCsv(json, false);
    System.out.println("csvOutputNoHeader:\n" + csvOutputNoHeader);
  }

测试数据结果:

[省份, 大学数量, 大专数量, 中专数量]
[北京, 50, 80, 120]
省份,大学数量,大专数量,中专数量
北京,50,80,120
csvOutputWithHeader:
省份,大学数量,大专数量,中专数量
北京,50,80,120
上海,45,75,110
csvOutputNoHeader:
北京,50,80,120
上海,45,75,110

你可能感兴趣的:(数据分析,Java,大数据,java,json,开发语言,大数据,数据分析)