通过常见的键值对组合 JSON

2023-11-29

我目前正在解决一个问题,似乎无法解决这个问题。这是一些数据,以便您了解我在下面所说的内容:

foo.json

{
    "Schedule": [
        {
            "deviceId": 123,
            "reservationId": 123456,
            "username": "jdoe"
        },
        {
            "deviceId": 456,
            "reservationId": 589114,
            "username": "jsmith"
        }
    ],
    "serverTime": 1522863125.019958
}

bar.json

[
    {
        "a": {
            "b": "10.0.0.1",
            "c": "hostname1"
        },
        "deviceId": 123
    },
    {
        "a": {
            "b": "10.0.0.2",
            "c": "hostname2"
        },
        "deviceId": 456
    }
]

foob​​ar.json

{
    "Schedule": [
        {
            "deviceId": 123,
            "reservationId": 123456,
            "username": "jdoe",
            "a": {
                "b": "10.0.0.1",
                "c": "hostname1"
            }
        }
        },
        {
            "deviceId": 456,
            "reservationId": 789101,
            "username": "jsmith",
            "a": {
                "b": "10.0.0.2",
                "c": "hostname2"
            }
        }
    ],
    "serverTime": 1522863125.019958
}

我正在尝试使用 jq 来执行此操作,并从这篇文章中获得了一些帮助:https://github.com/stedolan/jq/issues/1090目标是能够使用某些键作为文档之间的公共点来组合 JSON。数据可以嵌套任意数量的级别。在这种情况下,foo.json 的嵌套数据只有两层深度,但需要与嵌套 1 层深度的数据组合。

任何和所有的建议都会非常有帮助。如果需要的话,我也很乐意澄清和回答问题。谢谢你!


与 foobar.jq 如下:

def dict(f):
  reduce .[] as $o ({}; .[$o | f | tostring] = $o ) ;

($bar | dict(.deviceId)) as $dict
| .Schedule |= map(. + ($dict[.deviceId|tostring] ))

调用:

jq -f foobar.jq --argfile bar bar.json foo.json

产生如下所示的输出。

请注意,字典中的引用包含完整的对象(包括“deviceId”的键/值对),但没有必要del(.deviceId)因为路+定义在 jq 中。

Output

{
  "Schedule": [
    {
      "deviceId": 123,
      "reservationId": 123456,
      "username": "jdoe",
      "a": {
        "b": "10.0.0.1",
        "c": "hostname1"
      }
    },
    {
      "deviceId": 456,
      "reservationId": 589114,
      "username": "jsmith",
      "a": {
        "b": "10.0.0.2",
        "c": "hostname2"
      }
    }
  ],
  "serverTime": 1522863125.019958
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过常见的键值对组合 JSON 的相关文章

随机推荐

  • Codeigniter 删除...在哪里...以及

    我需要一点帮助 我如何使用 codeigniter 发送此查询 Delete FROM friendconnect WHERE who 5 and whos 1 OR whos 5 and who 1 我只发现 this gt db gt
  • .NET Core 依赖注入实例何时被释放?

    ASP NET Core 使用扩展方法IServiceCollection设置依赖注入 然后当需要类型时 它使用适当的方法创建一个新实例 AddTransient
  • 如何避免我的 makefile 重新链接

    我的 Makefile 正在重新链接 但我找不到原因 我不确定为什么 malloc 假设必须执行 NAME SRC c o 宏是否更改了 o 文件的时间戳或类似内容 CC gcc NAME app CFLAGS Wall Werror We
  • 无法在 Android 11 上以编程方式拍照 - Intent 返回取消状态

    开始一个意图 Intent intent new Intent MediaStore ACTION IMAGE CAPTURE CurrentFile new File getTempFileString CurrentUri FilePr
  • 捕获完整的异常消息

    考虑 Invoke WebRequest sumoApiURL Headers Content Type application json Credential cred WebSession webRequestSession Metho
  • 使用按钮而不是 ui 导航控制器在视图之间切换

    我看过这个帖子iPhone如何通过按钮切换视图 但这并没有回答如何使用按钮在视图之间来回切换 提出问题的人给出的答案是他们可以使用 uinavigationcontroller 在视图之间切换 我将以下代码放入 ibaction 中 当在主
  • Java Jersey 2:独立的?

    是否可以在 Java 应用程序中独立使用 Jersey REST 服务 我找到的每个示例都位于 Web 容器 web xml 的上下文中 感谢帮助 只需按照泽西岛文档入门 它使用 Grizzly 创建一个独立的服务器 使用 Maven 您可
  • 如何获取导入包的路径

    我在尝试获取导入包的路径时遇到困难 当我打印结果时os Getwd 在导入的包内 它显示与上相同的路径main包裹 这就是我所做的 项目结构 库 lib go package lib import os import fmt func in
  • 如何使用 scriptdom API 提取跨数据库引用

    微软已经曝光了scriptdom API解析并生成TSQL 我对它很陌生 并且仍在玩它 我想知道如何从这样的查询中获取跨数据库引用 UPDATE t3 SET description abc FROM database1 dbo table
  • 保存时如何检查字段是否发生变化?

    在我的模型中我有 class Alias MyBaseModel remote image models URLField max length 500 null True help text A URL that is downloade
  • 将条形子弹图转换为柱形图

    这是 highchart 子弹图的示例http jsfiddle net jlbriggs LdHYt 1 我们如何将其转换为柱形子弹图 Highcharts Renderer prototype symbols line function
  • 文本作为 CSS 的背景图像

    我正在尝试使用 Jquery 和 CSS 将字母表中的字母 随机 显示为 div 的背景图像 但是 我希望每个元素的字母是随机的 但我只能同时对所有图像进行随机化 HTML div class randbg div div class ra
  • std::chrono::duration::count 函数的实际结果类型是什么

    实际结果类型是什么std chrono duration count函数类似于以下情况 std chrono duration cast
  • 全局命名空间中的保留名称

    从我的回答中得出C 中的动态对象数组并作为后续行动在 C 标识符中使用下划线的规则是什么 显然 名字开头 后面跟着的大写字母在全局命名空间中保留 17 4 3 2 1 全局名称 lib global names 某些名称和函数签名集始终保留
  • 如何制作通用链表

    我正在尝试在中创建一个通用链表C编程语言和我 成功了 但我有一个小问题 链接列表 h struct Element void data struct Element nEl typedef struct Element Element st
  • C#7:Out 变量中的下划线 (_) 和星号 (*)

    我正在阅读 C 7 中新的输出变量功能here 我有两个问题 It says 我们也允许 丢弃 作为输出参数 形式为 让你忽略你不关心的参数 p GetCoordinates out var x out I only care about
  • 在C#中,接口可以实例化吗?

    我正在阅读中的代码here 我发现private ITreeModel model 在 TreeList cs 中 namespace Aga Controls Tree public class TreeList ListView reg
  • 通过嵌套字典键对 pandas 数据框进行分组

    我有一个 pandas 数据框 其中一列是字典类型 这是一个示例数据框 import pandas as pd df pd DataFrame a 1 2 3 b 4 5 6 version major 7 minor 1 major 8
  • 递归循环遍历 DOM 树并删除不需要的标签?

    tags array applet gt 1 script gt 1 html file get contents test html dom new DOMdocument dom gt loadHTML html xpath new D
  • 通过常见的键值对组合 JSON

    我目前正在解决一个问题 似乎无法解决这个问题 这是一些数据 以便您了解我在下面所说的内容 foo json Schedule deviceId 123 reservationId 123456 username jdoe deviceId