如何仅使用 jq 将嵌套 JSON 转换为 CSV

2023-12-02

我遵循 json,

{
    "A": {
        "C": {
            "D": "T1",
            "E": 1
        },
        "F": {
            "D": "T2",
            "E": 2
        }
    },
    "B": {
        "C": {
            "D": "T3",
            "E": 3
        }
    }
}

我想将其转换为 csv,如下所示,

A,C,T1,1
A,F,T2,2
B,C,T3,3

输出描述:将打印父母的键,直到到达叶子孩子。当我到达 leaf child 时,打印它的值。

我尝试过关注但未能成功

猫 my.json | jq -r '(map(keys) | add | unique) as $cols |映射(.as $row | $cols | map($row[.])) as $rows | $行[] | @csv'

它给我一个错误。

我无法对父键进行硬编码,因为实际的 json 有太多记录。但是json的结构是类似的。我缺少什么?


有些要求不清楚,但以下解决了问题的一种解释:

paths as $path
| {path: $path, value: getpath($path)}
| select(.value|type == "object" )
| select( [.value[]][0] | type != "object")
| .path + ([.value[]])
| @csv

(该程序可以优化,但此处的演示旨在使单独的步骤变得清晰。)

调用:

jq -r -f leaves-to-csv.jq input.json

Output:

"A","C","T1",1
"A","F","T2",2
"B","C","T3",3

不带引号的字符串

为了避免字符串两边出现引号,您可以将上面管道的最后一个组件替换为:

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

如何仅使用 jq 将嵌套 JSON 转换为 CSV 的相关文章

随机推荐

  • 文件未找到异常 IIS7

    我有一个 C Web 应用程序 在 VS2010 中运行得非常好 但是当部署到 IIS7 服务器时 返回 图像未找到图标 这段代码本质上是抓取网络共享位置上图像的缩略图 进行操作 然后推送回网页 Web 服务器与其尝试访问的文件位于同一网络
  • PHP json_encode - 奇怪的行为

    Using json encode对日期数组进行编码 它有时会做一件事 有时会做另一件事 例如 如果我尝试编码如下内容 array 6 0 gt string 6 Jun 24 1 gt string 6 Jun 25 2 gt strin
  • 如何将“4000万”转换为40,000,000美元?

    我正在寻找一种方法将数字字符串 如主题中所示 转换为正确的字符串 例如 40 000 000 php 是否提供了执行此操作的函数 谢谢您的帮助 str str replace billion 000000000 str str str re
  • 访问 Web 服务时出现 HTTP 403 错误

    我正在尝试从远程计算机访问网络服务 我设法从浏览器访问网络服务 但是当我尝试从应用程序调用 Web 服务时 我收到 HTTP 403 知道为什么吗 A 403响应表明您正在连接的主机或软件不允许访问 Web 服务 造成这种情况的原因可能是
  • 内联盒和原子内联盒的区别

    考虑以下代码 div div div display inline block div 块现在生成原子内联级框 正如中所述规格9 2 2 非行内框的行内级框 例如替换的 内联级元素 内联块元素和内联表 元素 被称为原子内联级框 因为它们 作
  • 剥离驱动器盘符

    通过使用 D 驱动器中文件夹中的命令 for f delims d in cd do set pathdrv d echo pathdrv 我得到 d 某个文件夹 我想编写批处理命令以在驱动器根目录中创建自动运行文件 请帮我删除驱动器号 d
  • 使用 SelectTokens 查询 JSON?使用 C# 中的 Newtonsoft.Json.Linq

    我试图在 C 中使用 Newtonsoft JSON Linq 来更改以下 JSON 中的 statusCode 值 disbursements id 1f337641 contactId f5eb2 statusCode 16600000
  • Node / Express:EADDRINUSE,地址已在使用中 - 终止服务器

    我有一个使用 connect 在 node js 中运行的简单服务器 var server require connect createServer actions server listen 3000 在我的代码中 我有实际的处理程序 但
  • 表有 2 个字段,但一次只能使用一个

    您将如何设计一个数据库 该数据库有一个包含 2 个字段的表 并且一次只能设置其中一个字段 而没有太多冗余 例如文件系统 假设我们有一张包含驱动器的表 一张包含文件夹 一张包含文件 驱动器和文件非常简单 但是 文件夹有一个父级 它可以是文件夹
  • 从存储过程 Transact-SQL SQL Server 中访问结果集

    我正在使用 SQL Server 2005 我想知道如何从 transact sql 中访问不同的结果集 以下存储过程返回两个结果集 例如 如何从另一个存储过程访问它们 CREATE PROCEDURE getOrder orderId a
  • Java中静态初始化和动态初始化有什么区别? [复制]

    这个问题在这里已经有答案了 最近在LeetCode上做一些练习时 我发现了一些技巧解决方案 它使用一个Object o来引用一个数组Object o new Object null null 我想也许是因为在java中一切都是对象 但是当我
  • 从“void*”到非“void”指针的转换需要显式强制转换(第 17 行)

    我正在阅读 Learn C the Hard Way 一书 当我尝试运行这个程序时 我收到以下错误消息 从 void 到非 void 指针的转换需要显式强制转换 我不知道如何解决这个问题 我是否必须更改结构中的返回变量 不管怎样 看一下 这
  • 为 Postgres 函数设置默认返回值

    我在 Postgres 中有以下功能 CREATE OR REPLACE FUNCTION point total user id integer gametime date RETURNS bigint AS BODY SELECT su
  • Python urllib urlencode 问题与æøå

    如何对带有特殊字符的字符串进行 urlencode ex urllib urlencode http www test com q test 我收到此错误 不是有效的非字符串序列或 映射对象 urlencode旨在获取字典 例如 gt gt
  • 消息:过时的元素引用:元素未附加到 Python 中的页面文档

    我一直在尝试在三个不同的网络链接中运行以下代码 代码在一个网络链接上运行良好 但是 它会抛出有关 消息 过时的元素引用 元素未附加到页面文档 的错误消息 我查看了论坛之前的两个主题 Python Selenium 过时元素修复 and 如何
  • 我的机器上 OpenCV 算法的 GPU 版本比 CPU 版本慢?

    在尝试使用 GPU 和 OpenCV 来加速简单算法时 我注意到在我的机器 Ubuntu 12 10 NVidia 9800GT Cuda 4 2 9 g 4 7 2 上 GPU 版本实际上比 CPU 版本慢 我用下面的代码进行了测试 in
  • Angular 12 升级后样式问题

    我们将 Angular 版本从 11 升级到 12 并且样式未应用于生产版本 如果我在开发构建中运行应用程序 我不会看到样式问题 但只有当我们进行产品构建时才会出现这种情况 我看到角度12ng build prod已弃用 因此使用 Angu
  • Mongoose 聚合返回空结果[重复]

    这个问题在这里已经有答案了 我在猫鼬聚合请求方面遇到问题 这让我发疯 因为我在任何地方都找不到解决方案 我将非常感谢任何支持 架构 var EvalSchema new Schema modified type Date default D
  • iOS 10:UITableViewCell的删除按钮自定义高度

    使用自定义 UITableViewCell 我尝试更改 tableViewCell 的删除按钮的高度 我已经尝试过这里提供的所有解决方案 每个人都提到在自定义 TableViewCell 类中我们需要重写layoutSubviews方法并迭
  • 如何仅使用 jq 将嵌套 JSON 转换为 CSV

    我遵循 json A C D T1 E 1 F D T2 E 2 B C D T3 E 3 我想将其转换为 csv 如下所示 A C T1 1 A F T2 2 B C T3 3 输出描述 将打印父母的键 直到到达叶子孩子 当我到达 lea