如何加入使用JQ特定领域的JSON对象?

问题描述 投票:1回答:1

我有以下JSON结构:

{
  "Reservations": [
    {
      "Id": "R-1",
      "CustomerId": "1"
    },
    {
      "Id": "R-2",
      "CustomerId": "2"
    }
  ],
  "Customers": [
    {
      "Id": "1",
      "Name": "customer 1"
    },
    {
      "Id": "2",
      "Name": "customer 2"
    },
    {
      "Id": "3",
      "Name": "customer 3"
    }
  ]
}

我想加入ReservationsCustomers和得到的东西是这样的:

{
  "ReservationId": "R-1",
  "CustomerName": "customer 1"
}
{
  "ReservationId": "R-2",
  "CustomerName": "customer 2"
}

我已经打了jq广泛,使用逗号分隔的多个过滤器试图使用变量,阅读文档试过,但似乎在做这样一个简单的任务是不可能的jq。或者说,我失去的东西吗?

json shell join command-line jq
1个回答
0
投票

下面是使用INDEX/2一个简单的解决方案:

INDEX(.Customers[]; .Id) as $c
| .Reservations[]
| { ReservationId: .Id,
    CustomerName: $c[.CustomerId].Name }

如果您的JQ没有INDEX/2那么现在是升级的好时机;否则,你可以从https://github.com/stedolan/jq/blob/master/src/builtin.jq复制和粘贴的闪避,或者按照下面的定义,你可以使用INDEX/3

INDEX / 3

def INDEX(s; k; v):
  reduce s as $x ({}; .[$x|k] = ($x|v));

INDEX(.Customers[]; .Id; .Name) as $c
| .Reservations[]
| { ReservationId: .Id,
    CustomerName: $c[.CustomerId] }
© www.soinside.com 2019 - 2024. All rights reserved.