JQ 如何将多个对象合并为一个

2023-11-27

给定以下输入(这是输出的简化版本,包含另一个复杂查询的 100K+ 对象):

echo '{ "a": { "b":"c", "d":"e" } }{ "a": { "b":"f", "d":"g" } }' | jq '.'
{
  "a": {
    "b": "c",
    "d": "e"
  }
}
{
  "a": {
    "b": "f",
    "d": "g"
  }
}

期望的输出:

{
   "c": "e",
   "f": "g"
}

或(更适合后续使用):

{
   x: {
      "c": "e",
      "f": "g"
   }
}

我一辈子都不知道该怎么做。当然,我真正的问题是多对象输入数据,我真的不知道它是否是有效的 JSON。 Jq 生成并接受它,而 jshon 则不。我尝试了各种可能性,但没有一个产生我需要的东西。我认为这是最有可能的候选人:

echo '{ "a": { "b":"c", "d":"e" } }{ "a": { "b":"f", "d":"g" } }' | jq ' . | { (.a.b): .a.d }'
{
   "c": "e"
}
{
   "f": "g"
}

可惜。我尝试过的其他事情:

' . | { x: { (.a.b): .a.d } }'
'{ x: {} | . | add }'
'{ x: {} | . | x += }'
'{ x: {} | x += . }'
'x: {} | .x += { (.a.b): .a.d }'
'{ x: {} } | .x += { (.a.b): .a.d }'

另一张,接近,但没有雪茄:

'reduce { (.a.b): .a.d } as $item ({}; . + $item)'
{
  "c": "e"
}
{
  "f": "g"
}

谁愿意启发我?

因此,感谢@peak,上述用例中的完整答案是

echo '{ "a": { "b": "c", "d": "e" } }{ "a": { "b": "f", "d": "g" } }' | jq -n '{ x: [inputs | .a | { (.b): .d} ] | add }'
{
  "x": {
    "c": "e",
    "f": "g"
  }
}

假设您有 jq 1.5 或更高版本,并且您的 JSON 对象位于一个或多个文件中。然后,对于您的第一个预期输出,您可以简单地编写:

[inputs | .a | { (.b): .d} ] | add

这假设您使用 -n 命令行选项。我确信,一旦您看到解决方案有多么简单,进一步的解释将是多余的。

对于第二个预期输出,您可以将上面的行包装在:

{x: _}

E.g.:

$ jq -ncf program.jq input.json
{"x":{"c":"e","f":"g"}}

p.s.你的方法使用reduce没问题,但您需要使用 -s 命令行选项。

p.p.s.你还欠我一杯啤酒吗?

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

JQ 如何将多个对象合并为一个 的相关文章

随机推荐

  • Windows 8 Metro 应用程序文件共享访问

    我正在开发一个 Windows 8 Metro 应用程序 我们打算将其部署到我们公司内的几台平板电脑上 它不适用于 Windows 应用商店 我们需要该应用程序访问公司网络共享上的某些目录 但强制用户使用FilePicker这不是我们想要的
  • 使用什么来代替 Object.keys()?

    我需要在 Jquery 中找到一些可以在 IE8 和真实浏览器中工作的东西 我是 Jquery 的新手 以下是我在现代浏览器中运行的代码 FIELD office id on change function offices this val
  • ASP.NET MVC 子域

    我有这样的托管和域名 www EXAMPLE com 我创建了几个这样的子域 www PAGE1 EXAMPLE com www PAGE2 EXAMPLE com www PAGE3 EXAMPLE com etc 所有这些子域都指向同一
  • 如何为多个 servlet 配置 spring security?

    我想在 spring mvc 应用程序中使用 spring security 该应用程序由两个模块组成 一个 前端 和一个管理模块 两个模块都有自己的调度程序 servlet 具有不同的映射 因此它们确实有自己的 Web 上下文 但共享相同
  • MySQL查询超时:(70100):查询执行被中断

    我想执行 MySQL 查询以删除所有Wp posts表行其中post parent is a Wp posts排与post type设置为产品 So I do INSERT INTO temp SELECT DISTINCT id FROM
  • 基于 C 的应用程序/项目的文件和文件夹结构 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 基于 C 编程语言的应用程序 项目的一般结构是什么 库 包括 头文件 等等等等 班级结构是什么 在 OOps 中 需要可扩展和其他功能 类似 mai
  • NodeJS 中将字符串从 utf8 转换为 latin1

    我使用的是 Latin1 编码的数据库 无法将其更改为 UTF 8 这意味着我遇到了某些应用程序数据的问题 我正在使用 Tesseract 对文档进行 OCR tesseract 以 UTF 8 编码 并尝试使用 iconv lite 但是
  • 将内存转储到文件

    我想将一部分内存转储到文件中 一个原因是将信息保存在某个地方 另一个原因是当我的程序重新启动时再次读取它 这样做的正确方法是什么 我的第一个想法是 char start my pointer int i for i 0 i lt MEMOR
  • 过程指针,派生类型

    以下内容无法在 Intel Fortran XE 2011 中编译 TYPE type1 procedure interface1 POINTER p END TYPE type1 ABSTRACT INTERFACE integer fu
  • Firebase 错误:W/BiChannelGoogleApi:[FirebaseAuth:] getGoogleApiForMethod() 返回 Gms

    这是我的注册活动 我正在尝试使用 Firebase 创建一个 createUserWithEmailAndPassword 并向用户的个人资料添加一些详细信息 例如全名 地址和电话号码 我想在使用电子邮件和密码创建用户时在分配给新用户的 用
  • SolidJS:控制台日志中的“在`createRoot`或`render`之外创建的计算将永远不会被释放”消息

    在处理 SolidJS 项目时 您可能会开始在 JS 控制台中看到以下警告消息 computations created outside a createRoot or render will never be disposed Solid
  • 使用故事板的优点和缺点

    我计划学习使用故事板开发应用程序 任何人都可以发布使用 StoryBoards 时的一些优点和缺点吗 何时使用 Storyboard 以及何时使用 XIB 在 iOS 编程中使用 Storyboard 代替 xib 文件有什么好处 ipho
  • MySQL 更新更改多个列是非原子的吗?

    我在使用 Django 和 MySQL 5 5 22 时遇到以下问题 给定一个包含 id level 列和存储为 a11 a12 a21 a22 的 2x2 矩阵的表 我有这一行 id a11 a12 a21 a22 level 324 3
  • 创建多个变量[重复]

    这个问题在这里已经有答案了 我想用一个创建 10 个变量for在Python中 不是数组 像这样的东西 for i in range 1 10 1 variable i 100 i print variable i 我想创建变量名称 在本例
  • 转置 pandas 数据框的一部分

    我有以下数据框 gt gt gt df Out 15 group type amount number 0 group A buy 100 123 1 group A view 0 111 2 group B view 0 222 3 gr
  • 在 Django 中将 unaccent 与 SearchVector 和 SearchQuery 一起使用

    我已经在 Django 中安装了 UnaccentExtension 但在使用它进行搜索时遇到问题 vector SearchVector title unaccent abstract unaccent query SearchQuery
  • PHPMailer IsHTML(true) 不起作用

    我正在尝试从 PHPMailer 发送电子邮件 一切正常 但问题是 即使在写入后 它也会随 HTML 标签一起发送电子邮件 mail gt IsHTML true 下面是我发送电子邮件的代码 mail new PHPMailer mail
  • 在 bash 中清理 $PATH [关闭]

    Closed 这个问题是无关 目前不接受答案 我的路径有很多很久以前通过脚本添加的条目 他们不在我的 bashrc bash profile or bash login 我担心重置我的路径 bashrc将会产生不良的长期结果 有没有办法找到
  • Droid:如何以编程方式重新排序线性布局内容?

    我有一个带有按钮列表的滚动视图 我希望在第一次使用应用程序时将说明放在此列表的开头 但在用户使用一次后将说明移至屏幕末尾 因为实际上不再需要说明 但我仍然想要他们可以访问 我不知道从哪里开始 编辑 根据要求提供不同的解释 我的主要布局有一张
  • JQ 如何将多个对象合并为一个

    给定以下输入 这是输出的简化版本 包含另一个复杂查询的 100K 对象 echo a b c d e a b f d g jq a b c d e a b f d g 期望的输出 c e f g 或 更适合后续使用 x c e f g 我一