跳转到主要内容

有偏见的JSON到CSV转换器

项目描述

完整文档

简介

一个有偏见的JSON到CSV/XLSX/SQLITE/PARQUET转换器,旨在为数据分析创建有用的关系型输出。

CSV/XLSX转换的Web沙盒

理由

当收到一个结构深层嵌套或未明确指定的JSON文件时,很难确定数据包含的内容。此外,即使知道JSON结构,也需要花费大量时间来确定如何将JSON扁平化成关系型结构,以便进行数据分析和成为数据管道的一部分。

Flatterer旨在成为解决上述问题的首选工具。它可能不是您最终用于在数据管道中扁平化JSON的工具,因为可能需要手动扁平化,但它可能是。它比大多数手动方法具有许多优势

  • 它速度快,用Rust编写,但提供了Python绑定,以便易于使用。它可以比手写的Python扁平化快10倍。
  • 内存高效。使用自定义流式JSON解析器,这意味着嵌套在JSON中的长列表对象将被流式传输,因此不需要一次加载大量数据到内存中。
  • 快速高效的CSV/XLSX/SQLITE/PARQUET输出
  • 使用从无数次扁平化JSON中学到的最佳实践,例如生成键以将一对一多表与其父表关联。

安装

pip install flatterer

Flatterer需要Python 3.6或更高版本。它用Rust编写的Python扩展,但提供了适用于linux (x64)、macos (x64和通用) 和windows (x64, x86) 的二进制文件(wheels)。在其他平台上需要安装Rust工具链。

示例JSON

假设您有一个名为 games.json 的如下JSON数据

[
  {
    "id": 1,
    "title": "A Game",
    "releaseDate": "2015-01-01",
    "platforms": [
      {"name":"Xbox"},
      {"name":"Playstation"}
    ],
    "rating": {
      "code": "E",
      "name": "Everyone"
    }
  },
  {
    "id": 2,
    "title": "B Game",
    "releaseDate": "2016-01-01",
    "platforms": [
      {"name":"PC"}
    ],
    "rating": {
      "code": "E",
      "name": "Everyone"
    }
  }
]

运行Flatterer

使用flatterer运行上述文件。

flatterer games.json games_dir

输出文件

运行上述命令后,将得到以下文件

tree games_dir

games_dir/
├── csv
│   ├── games.csv
│   └── platforms.csv
├── datapackage.json
├── fields.csv
└── ...

主表

games.csv 包含以下内容

_link _link_games id rating_code rating_name releaseDate title
1 1 1 E 所有人 2015-01-01 A Game
2 2 2 E 所有人 2016-01-01 B Game

生成了一个特殊列 _link。在这里,_link 是主键,对每个游戏是唯一的。

此外,将 rating 子对象提升到这个表中,它与 games 有一对一的关系。子对象属性由 '_' 分隔。

一对多表

platforms 是一个数组,所以它与游戏有一对多关系,因此需要它自己的表:platforms.csv 包含

_link _link_games 名称
1.platforms.0 1 Xbox
1.platforms.1 1 Playstation
2.platforms.0 2 PC

链接字段

_link 也是 platforms 表的主键。除了 games 表之外,每个表都包含一个 _link_games 字段,以便轻松连接到主 games 表。

如果有 platforms 的子数组,那么它将具有 _link_link_games_link_platforms 字段。

为了概括这一点,_link__<table_name> 字段与 <table_name>_link 字段连接,即 _link__<table_name> 是引用 <table_name>._link 的外键。

字段 CSV

fields.csv 包含有关输出表的一些元数据

表名 字段名 字段类型 计数 字段标题
platforms _link 文本 3 _link
platforms _link_games 文本 3 _link_games
platforms 名称 文本 3 名称
games _link 文本 2 _link
games id 数字 2 id
games rating_code 文本 2 rating_code
games rating_name 文本 2 rating_name
games releaseDate 日期 2 releaseDate
games title 文本 2 title

field_type 列包含一个插入数据库时有用的类型猜测。 field_title 是 CSV 文件或 XLSX 选项卡中的列标题,最初与字段名相同。编辑此文件后,您可以重新运行转换

flatterer games.json new_games_dir -f myfields.csv --only-fields

这可以用于重命名列、调整字段顺序或如果您想删除某些字段,则 --only-fields 标志将仅包含编辑文件中的字段。

datapackage.json 包含在 表格数据包规范 中的元数据

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装软件包 的信息。

源分发

flatterer-0.19.19.tar.gz (7.8 MB 查看哈希值)

上传时间

构建分发

flatterer-0.19.19-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl (21.8 MB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.28+ x86-64

flatterer-0.19.19-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl (21.8 MB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.28+ x86-64

flatterer-0.19.19-cp312-none-win_amd64.whl (17.5 MB 查看哈希值)

上传时间 CPython 3.12 Windows x86-64

flatterer-0.19.19-cp312-none-win32.whl (15.7 MB 查看哈希值)

上传时间 CPython 3.12 Windows x86

flatterer-0.19.19-cp312-cp312-manylinux_2_28_x86_64.whl (21.8 MB 查看哈希值)

上传时间 CPython 3.12 manylinux: glibc 2.28+ x86-64

flatterer-0.19.19-cp312-cp312-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (33.1 MB 查看哈希值)

上传时间 CPython 3.12 macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64

flatterer-0.19.19-cp312-cp312-macosx_10_7_x86_64.whl (18.6 MB 查看哈希值)

上传时间 CPython 3.12 macOS 10.7+ x86-64

flatterer-0.19.19-cp311-none-win_amd64.whl (17.5 MB 查看哈希值)

上传时间 CPython 3.11 Windows x86-64

flatterer-0.19.19-cp311-none-win32.whl (15.7 MB 查看哈希值)

上传时间 CPython 3.11 Windows x86

flatterer-0.19.19-cp311-cp311-manylinux_2_28_x86_64.whl (21.8 MB 查看哈希值)

上传时间 CPython 3.11 manylinux: glibc 2.28+ x86-64

flatterer-0.19.19-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (33.0 MB 查看哈希值)

上传时间 CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64

flatterer-0.19.19-cp311-cp311-macosx_10_7_x86_64.whl (18.6 MB 查看哈希值)

上传于 CPython 3.11 macOS 10.7+ x86-64

flatterer-0.19.19-cp310-none-win_amd64.whl (17.5 MB 查看哈希值)

上传于 CPython 3.10 Windows x86-64

flatterer-0.19.19-cp310-none-win32.whl (15.7 MB 查看哈希值)

上传于 CPython 3.10 Windows x86

flatterer-0.19.19-cp310-cp310-manylinux_2_28_x86_64.whl (21.8 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.28+ x86-64

flatterer-0.19.19-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (33.1 MB 查看哈希值)

上传于 CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64

flatterer-0.19.19-cp310-cp310-macosx_10_7_x86_64.whl (18.7 MB 查看哈希值)

上传于 CPython 3.10 macOS 10.7+ x86-64

flatterer-0.19.19-cp39-none-win_amd64.whl (17.5 MB 查看哈希值)

上传于 CPython 3.9 Windows x86-64

flatterer-0.19.19-cp39-none-win32.whl (15.7 MB 查看哈希值)

上传于 CPython 3.9 Windows x86

flatterer-0.19.19-cp39-cp39-manylinux_2_28_x86_64.whl (21.8 MB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.28+ x86-64

flatterer-0.19.19-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (33.1 MB 查看哈希值)

上传于 CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64

flatterer-0.19.19-cp39-cp39-macosx_10_7_x86_64.whl (18.6 MB 查看哈希值)

上传时间 CPython 3.9 macOS 10.7+ x86-64

flatterer-0.19.19-cp38-none-win_amd64.whl (17.5 MB 查看哈希值)

上传时间 CPython 3.8 Windows x86-64

flatterer-0.19.19-cp38-none-win32.whl (15.7 MB 查看哈希值)

上传时间 CPython 3.8 Windows x86

flatterer-0.19.19-cp38-cp38-manylinux_2_28_x86_64.whl (21.8 MB 查看哈希值)

上传时间 CPython 3.8 manylinux: glibc 2.28+ x86-64

flatterer-0.19.19-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (33.1 MB 查看哈希值)

上传时间 CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64

flatterer-0.19.19-cp38-cp38-macosx_10_7_x86_64.whl (18.7 MB 查看哈希值)

上传时间 CPython 3.8 macOS 10.7+ x86-64

flatterer-0.19.19-cp37-cp37m-manylinux_2_28_x86_64.whl (21.8 MB 查看哈希值)

上传时间 CPython 3.7m manylinux: glibc 2.28+ x86-64

flatterer-0.19.19-cp37-cp37m-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (33.1 MB 查看哈希值)

上传时间 CPython 3.7m macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64

flatterer-0.19.19-cp37-cp37m-macosx_10_7_x86_64.whl (18.6 MB 查看哈希值)

上传时间 CPython 3.7m macOS 10.7+ x86-64

由以下支持