jq:构建查找 table

jq: build lookup table

我正在尝试在 jq 中构建查找 table。

输入:

  {
    "Object1": {
        "id": 1,
        "name": "object1name"
    },
    "Object2": {
        "id": 24,
        "name": "object2name"
    }
  }  

预期输出:

{
    "object1name":1,
    "object2name":2 
}

我尝试了以下 jq 代码,但它给了我一个错误:

{.[] | ((.name):.id)}

收集数组中的对象并用add减少它:

$ jq '[.[] | {(.name): .id}] | add' tmp.json
{
  "object1name": 1,
  "object2name": 24
}

您可以将过滤器写得更简洁一点,如 map({(.name): .id}) | add

Why doesn't my code [work] though?

你很接近!尽管@chepner 的回答是最直接的,但按照您似乎一直在思考的思路回答肯定是可能的:

[ {(.[] | .name): .id}] | add