如何将一个大型、复杂、深度嵌套的 JSON 文件扁平化为多个 CSV 文件(链接标识符)

2023-12-28

我有一个复杂的 JSON 文件(~8GB),其中包含企业公开可用的数据。我们决定将文件拆分为多个 CSV 文件(或 .xlsx 中的选项卡),以便客户可以轻松使用数据。这些文件将通过 NZBN 列/键链接。

我正在使用 R 和 jsonlite 读取一个小样本(在扩展到完整文件之前)。我猜我需要某种方法来指定每个文件中的键/列(即,第一个文件将具有标题:australianBusinessNumber、australianCompanyNumber、australianServiceAddress,第二个文件将具有标题:annualReturnFilingMonth、annualReturnLastFiled、countryOfOrigin ...)

这是两个企业/实体的示例(我也破坏了一些数据,因此忽略实际值):测试文件 https://www.dropbox.com/s/feb3vvyzgg7dz5j/bd_test.json?dl=0

我几乎阅读了 s/o 上类似问题的所有帖子,但似乎没有一个给我带来任何运气。我尝试过 purrr、*apply 命令、自定义扁平化函数和 jqr 的变体(“jq”的 r 版本 - 看起来很有希望,但我似乎无法运行它)。

这是创建单独文件的尝试,但我不确定如何包含链接标识符(NZBN)+我不断遇到进一步的嵌套列表(我不确定有多少层嵌套)

bulk <- jsonlite::fromJSON("bd_test.json")

coreEntity <- data.frame(bulk$companies)
coreEntity <- coreEntity[,sapply(coreEntity, is.list)==FALSE] 

company <- bulk$companies$entity$company
company <- purrr::reduce(company, dplyr::bind_rows)

shareholding <- company$shareholding
shareholding <- purrr::reduce(shareholding, dplyr::bind_rows)

shareAllocation <- shareholding$shareAllocation
shareAllocation <- purrr::reduce(shareAllocation, dplyr::bind_rows)

我不确定在展平/整理过程中分割文件是否更容易,或者只是完全展平整个文件,这样我每个企业/实体只有一行(然后根据需要收集列) - 我唯一关心的是我需要将其扩展到约 130 万个节点(8GB JSON 文件)。

理想情况下,我希望每次有新集合时都会拆分 csv 文件,并且集合中的值将成为新 csv/选项卡的列。

任何帮助或提示将不胜感激。

- - - - 更新 - - -

更新了,因为我的问题有点模糊,我认为我所需要的只是一些代码来生成其中一个 csv/选项卡,并为其他集合复制。

举例来说,我想创建包含以下元素的 csv:

  • 实体名称(唯一链接标识符)
  • nzbn(独特的链接 标识符)
  • 电子邮件地址__唯一标识符
  • 电子邮件地址__电子邮件地址
  • 电子邮件地址__电子邮件目的
  • 电子邮件地址__emailPurposeDescription
  • 电子邮件地址__开始日期

我该怎么办呢?


我不确定有多少层嵌套

这将非常有效地提供答案:

jq '
  def max(s): reduce s as $s (null; 
    if . == null then $s elif $s > . then $s else . end);
   max(paths|length)' input.json

(根据测试文件,答案是 14。)

要获得数据的总体视图(架构),您可以 跑步:

 jq 'include "schema"; schema' input.json

其中 schema.jq 在此可用gist https://gist.github.com/pkoppstein/a5abb4ebef3b0f72a6ed。这将产生一个结构模式。

“举例来说,我想创建包含以下元素的 csv:”

除了标题之外,这是一个 jq 解决方案:

.companies.entity[]
| [.entityName, .nzbn]
  + (.emailAddress[] | [.uniqueIdentifier, .emailAddress, .emailPurpose, .emailPurposeDescription, .startDate])
| @csv

持股

股权数据比较复杂,所以下面我使用to_table本页其他地方定义的函数。

示例数据不包含“公司名称”字段,因此在下面,我添加了一个基于 0 的“公司索引”字段:

  .companies.entity[]
  | [.entityName, .nzbn] as $ix
  | .company
  | range(0;length) as $cix
  | .[$cix]
  | $ix + [$cix] + (.shareholding[] | to_table(false))

jqr

上述解决方案使用独立的 jq 可执行文件,但一切顺利,使用相同的过滤器应该很简单jqr https://github.com/ropensci/jqr,尽管使用 jq 的include,明确指定路径可能是最简单的,例如:

include "schema" {search: "~/.jq"};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将一个大型、复杂、深度嵌套的 JSON 文件扁平化为多个 CSV 文件(链接标识符) 的相关文章

  • 读取r中不同目录中的多个文件[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想从不同的目录读取多个 csv 文件 然后将其放入单个数据框中 我有两种目录可供阅读 A LogIIS 文件夹01 文件 csv 在
  • 使用 ggplot2 和 geom_area 堆叠负/正时间序列

    我正在尝试重现一个堆积的时间序列图 该图显示银行资产负债表的构成和规模如何随时间变化 它应该看起来像这样 资产位于 x 轴上方 负债位于 x 轴下方 到目前为止 我已经能够使用以下方法成功重现图表的每一半ggplot plot assets
  • R 中的约束优化

    我正在尝试使用http rss acs unt edu Rdoc library stats html constrOptim html http rss acs unt edu Rdoc library stats html constr
  • R 中的插补 MICE 仍不存在于数据集中

    运行 MICE 包后 5 个完整插补集中的缺失值数量从 147428 减少到 46093 但不是应该是 0 NA 吗 Thanks 这是我的 MICR 代码 imp mice newdata imputationSet1 complete
  • 如何使用 gvisMotionChart 处理 POSIXlt 格式时间?

    The googleVisR软件包出奇的好 然而 我对一个问题感到困惑gvisMotionChart关于 timevar 因为我的数据集中的时间是POSIXlt格式 例如 2009 07 02 19 00 00 2009 07 02 20
  • 当我创建新变量时出了什么问题?

    我想根据原始变量施加的条件创建一个新变量 比方说 原始变量 var 是由 1 20 中的随机样本组成的向量 并且 当原来的 var 大于10时 新变量 newvar 被设置为缺失 当 var 小于10时 新变量 newvar 被设置为等于
  • 如何向 ggplot 标题和标题添加图标?

    现在我正在尝试将图标放入 ggplot 可视化中 为此 我在网上检查了一些教程 当我运行 Claus Wilke 的以下代码示例时 library ggtext library ggplot2 ggplot mtcars aes mpg d
  • Facebook Graph API 使用 json 和 C# 检索好友

    我正在使用 C 和 Graph API 进行工作 并且能够获取 Facebook 用户个人资料信息 例如 ID 姓名和电子邮件 然后反序列化 JSON 以便能够将值分配给标签 然而 我的问题是 当我去获取好友列表或任何与此相关的列表时 如何
  • 如何在Shiny中引用ui.R中的反应元素

    我正在使用 ShinyDND 包制作一个具有拖放功能的应用程序 我想将输入中的列表作为 DragSetUI 的参数传递 该函数需要在 ui R 中运行 我尝试了renderUI和uiOutput 它几乎可以工作 但是拖动的元素无法放置在放置
  • 无法安装bigrf包

    我在安装 bigrf R 软件包时遇到了一些极其令人沮丧的困难 我已经尝试过以下方法 install packages bigrf repo https github com aloysius lim bigrf git type sour
  • 条件 RenderUI R 闪亮

    我的 renderUI 有问题 但在任何地方都找不到解决方案 可能我向谷歌问了错误的问题 不仅仅是一个闪亮的问题 而是一个基本的 R 问题 我在 R 中有一个函数 根据输入将返回一个表格或文本 所以我在我的 server R 中以这种方式创
  • 如何在 Objective C 中创建 json 字符串?

    我必须动态生成一个 json 字符串并需要发送到服务器 有谁知道如何使用NSJSONSerialization 下面是我的字符串 surveyid Survey1 responsetime dd mm yyyy hh mm ss locat
  • 从 R 文本中提取网站链接

    我有多个文本 每个文本都可能包含对一个或多个网络链接的引用 例如 text1 s 1212a as www abcd com asasa11 我如何提取 www abcd com 来自 R 中的这段文字 换句话说 我希望提取以www并结束于
  • WCF 自定义序列化器

    我正在 WCF 中创建一个返回 JSON 的 Web 服务 但 DataContractJsonSerializer 对某些循环引用犹豫不决 在这种特殊情况下我无法删除这些引用 相反 我想使用 Newtonsoft json 库 在 WCF
  • R 用簇绘制热图,但隐藏树状图

    默认情况下 Rheatmap将聚集行和列 mtscaled as matrix scale mtcars heatmap mtscaled scale none 我可以禁用集群 heatmap mtscaled Colv NA Rowv N
  • 是否可以旋转 R 中的绘图(基本图形)?

    我搜索了这个 发现使用 grid 有多种方法可以旋转图像 并且对于某些绘图 您可以使用它们的旋转 例如plot x y 而不是plot y x 不过我想知道是否有R 中旋转绘图的通用方法 适用于基础图形中生成的任何绘图 您可以导出图形 将其
  • 通过另一个函数将数据和列名称传递给 ggplot

    我将直接跳到一个示例并在后进行评论 cont lt data frame value c 1 20 variable c 1 20 1 20 1 5 1 20 2 group rep c 1 2 3 each 20 value variab
  • serde_json::from_str 错误,其中字符串来自文件

    extern crate serde json use serde json Value use std fs File use std io prelude fn main let filepath map test anhui txt
  • 使用 kableExtra 增加行/行间距

    有没有办法在 r markdown 或 bookdown 中使用 kableExtra 增加 pdf 输出的行间距 library knitr library kableExtra kable head iris 5 caption Iri
  • 将Json字符串映射到java中的map或hashmap字段

    假设我从服务器返回了以下 JSON 字符串 response imageInstances one id 1 url ONE two id 2 url TWO 杰克逊代码大厦 JsonProperty 我怎样才能得到HashMap对象出来了

随机推荐

  • 相当于 Scala dropWhile

    我正在努力寻找一种方法来根据谓词跳过流开头的某些元素 像这样的事情 dropWhile n gt n lt 3 Stream of 0 1 2 3 0 1 2 3 4 forEach System out println 3 0 1 2 3
  • 通过浏览器后退按钮访问时重新加载网站

    问题 我有一个包含动态内容的网站 每次用户看到它时都需要重新加载 这包括当用户点击另一个站点上的后退按钮并到达需要重新加载的站点时的用例 大多数 全部 浏览器在此事件后不会刷新网站 我的解决方案 不太有效 http www hunlock
  • C++ 异常处理

    所以我正在编写一些代码 我注意到除了语法 类型和其他编译时错误之外 C 不会抛出任何其他异常 所以我决定用一个非常简单的程序来测试一下 include
  • 列表视图设置自定义波纹选择器

    我尝试在以下条件下在 Lollipop 上使用列表视图控件 主题类型是默认的Theme Material 深色主题 列表视图包含在具有白色背景的较大布局内 列表视图应该有一个以白色背景出现的列表选择器 注意 我被迫使用自定义列表选择器颜色
  • Python 换出 sys.modules 并不像直觉那样工作

    我正在尝试设置字典sys modules在寻找答案时另一个问题 https stackoverflow com q 42134260 2988730并发现了一些有趣的事情 链接的问题涉及消除导入模块的所有影响 基于另一个帖子 https s
  • 如何在 Java 单例中维护可变状态

    我有一个 Java 中的单例 在 OSGi 服务中 并且想要维护其中的某些状态 计数器 这个变量应该是静态的吗 或同步 或两者 或者我应该将操作包装在同步方法中 这与仅仅使 var 同步有什么不同吗 我希望服务操作的消费者增加此计数器 pu
  • WPF 中的水平菜单和水平子菜单

    我一直在与 WPF 作斗争Menu我根本无法实现我想要的目标 我尝试更改默认样式Menu and MenuItem控制 但这结果很糟糕 然后我尝试使用控件模板来设计它的样式 但是 我想我开始意识到我的 WPF 技能还不具备 这是我想要的结果
  • XAML WebView 绑定到字符串在 Xamarin Forms 中不起作用

    我是 C 和 Xamarin Forms 的新手 我有一个 webview 并从 API 获取源 url 对于这个问题 我已经对值进行了硬编码 我绑定了源 url 而不是将值添加到 XAML 中的 Source 但这不起作用 堆栈和论坛中的
  • 如何在java中读取或解析MHTML(.mht)文件

    我需要开采content大多数已知的文档文件 例如 pdf html 文档 docx等 对于大多数文件格式 我计划使用 http tika apache org http tika apache org 但截至目前Tika不支持 MHTML
  • 如何重置/清除 erlang 终端

    我正在尝试重置提示 忘记所有变量并从第 1 行开始提示 gt 我知道以下内置函数 f forget all io format e H e J clear screen and moving cursor to the begin of t
  • Intellij IDEA无法导入两个包含同名子模块的gradle项目

    我有两个 gradle 项目 projectA 子模块 projectB 子模块 两个子模块具有相同的名称 但组 ID 不同 当我尝试将两个项目导入到 IDEA 中的同一工作区时 它正确导入一个项目 根模块 子模块 并且仅导入第二个项目的根
  • 获取线段和 2^n 网格之间的所有交点(以整数表示)

    我有一条从 x0 y0 到 x1 y1 的线 穿过由 2 n 宽的方形瓷砖组成的网格 我不仅需要找到线相交的图块 还需要找到相应的入口点和出口点 我可以找到所有关于此的问题都涉及 1x1 图块 而不关心图块内交叉点的位置 这些点并不总是精确
  • 第一次后按时 searchview 未正确关闭(它只是失去焦点)

    我必须按两次后退按钮才能关闭SearchView 为什么 第一次按下时 SearchView只会失去焦点 Setting setOnKeyListener on SearchView也不起作用 顺便说一句 我正在使用 ABS 实现 我的代码
  • javascript 中有效的 base64 图像字符串出现 DOM 异常 5 INVALID CHARACTER 错误

    我正在尝试将图像的 Base64 字符串解码回二进制 以便操作系统可以在本地下载和显示它 当将字符串作为带有数据 URI 前缀 数据 img png base64 的 HTML IMG 元素的 src 时 我成功渲染了字符串 但是当使用 a
  • C 中的指针(将地址传递给函数)

    我正在尝试解决这个问题 问题说 swap nums 似乎有效 但 swap pointers 无效 修复它 顺便说一句 我是初学者 我相信我可以自己解决这个问题 但问题是我有点难以理解 C 语言中的一些编程概念 这里我展示了需要编辑的给定代
  • CakePHP 中的 base_url

    在大多数 Web 应用程序中 我们需要全局变量 base url 在cakephp中 当前要获取base url 我将以下代码放在app controller php中的beforeRender方法上 function beforeRend
  • 如何在 VS Code 中为 Spring Boot 项目添加 JVM 参数?

    我正在尝试 VS Code 方法是将我在 Eclipse 上完成的项目移至 VS Code 我在 Eclipse 中有一个该项目的运行配置 其中包含以下 JVM 参数 module path lib javafx sdk 13 lib ad
  • 在 Mac 上安装 Caffe 错误:“致命错误:找不到‘cblas.h’文件”

    我一直在关注本指南 http playittodeath ru how to install caffe on mac os x yosemite 10 10 4 安装在我的 El Capitan macbook pro 上 使用 CMak
  • 用于 C++ 的 UML 免费逆向工程工具(.h/.cpp ==> 类图)[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有哪些工具可用于创建 UMLClass来自一组 h 文件或 cpp 文件的图表 我正在寻找一些东西 is
  • 如何将一个大型、复杂、深度嵌套的 JSON 文件扁平化为多个 CSV 文件(链接标识符)

    我有一个复杂的 JSON 文件 8GB 其中包含企业公开可用的数据 我们决定将文件拆分为多个 CSV 文件 或 xlsx 中的选项卡 以便客户可以轻松使用数据 这些文件将通过 NZBN 列 键链接 我正在使用 R 和 jsonlite 读取