使用 Tablesaw 处理 JSON 基础

Java 中的数据导入

Anthony Markham

VP Quant Developer

JSON 简介

  • JSON:JavaScript Object Notation
    • 轻量的数据交换格式
    • Web API 标准格式
    • 键-值对结构

json_image.jpg

Java 中的数据导入

表格数据

  • 固定的行与列
  • 表格:数据类型统一
| Name  | Age | City    |
|-------|-----|---------|
| Alice | 30  | Boston  |
| Bob   | 25  | Seattle |

JSON

  • 灵活的嵌套结构
  • 混合数据类型与层级
[
  {"name": "Alice", 
      "age": 30, 
      "address": {"city": "Boston", 
                  "state": "MA"}},
  {"name": "Bob", 
      "age": 25, 
      "address": {"city": "Seattle", 
                  "state": "WA"}}
]
Java 中的数据导入

读取 JSON

  • 仅用于简单 JSON 文件
// 读取 JSON 的简单方法
Table products = Table.read().file("products.json");

$$

import tech.tablesaw.io.json.JsonReader;
import tech.tablesaw.io.json.JsonReadOptions;
  • 提供更多配置
// 使用 JsonReadOptions 读取 JSON 文件
JsonReadOptions options = JsonReadOptions.builder("products.json").build();

Table products = new JsonReader().read(options);
Java 中的数据导入

访问 JSON 数据

  • 可直接使用熟悉的 Tablesaw 方法
// 从 JSON 数据访问列
StringColumn names = table.stringColumn("name");
DoubleColumn prices = table.doubleColumn("price");

// 执行计算 double avgPrice = prices.mean(); String mostExpensive = table .where(prices.isEqualTo(prices.max())) .stringColumn("name").get(0);
Java 中的数据导入

JSON 最佳实践——验证

  • 在处理前先验证 JSON 结构
// 验证与错误处理
try {
    JsonReadOptions options = JsonReadOptions.builder("data.json").build();
    Table data = new JsonReader().read(options);
    if (data.rowCount() > 0) {
        // 处理数据
    }
} catch (Exception e) {
    System.err.println("Error reading JSON: " + e.getMessage());
}
if (data.rowCount() == 100) {
    System.out.println("Table has exactly 100 rows - processing data");
}
Java 中的数据导入

JSON 最佳实践——缺失值

  • 处理缺失/null 值
// 删除含任意缺失值的行
data = data.dropRowsWithMissingValues();
  • 将数据类型与分析需求匹配
// 将整数列转为 double 便于计算
data = data.replaceColumn("price", data.intColumn("price").asDoubleColumn());
Java 中的数据导入

Vamos praticar!

Java 中的数据导入

Preparing Video For Download...