Home > Net >  Bash jq include search key
Bash jq include search key

Time:09-24

When searching in a json by key i want also to print the key I search by:

Input:

{"menu": {
  "id": "file",
  "value": "File",
  "popup": {
    "menuitem": [
      {"value": "New", "onclick": "CreateNewDoc()"},
      {"value": "Open", "onclick": "OpenDoc()"},
      {"value": "Close", "onclick": "CloseDoc()"}
    ]
  }
}}

When search by ".menu.popup", actual result:

$ jq ".menu.popup" test.json 
{
  "menuitem": [
    {
      "value": "New",
      "onclick": "CreateNewDoc()"
    },
    {
      "value": "Open",
      "onclick": "OpenDoc()"
    },
    {
      "value": "Close",
      "onclick": "CloseDoc()"
    }
  ]
}

expected output:

{
  "popup": {
    "menuitem": [
      {
        "value": "New",
        "onclick": "CreateNewDoc()"
      },
      {
        "value": "Open",
        "onclick": "OpenDoc()"
      },
      {
        "value": "Close",
        "onclick": "CloseDoc()"
      }
    ]
  }
}

An obvious solution is to prefix output with search key, but I wonder if it is possible to include parent key natively for jq.

CodePudding user response:

Construct a new object rather than simply returning the value associated with the key.

jq '{popup: .menu.popup}' tmp.json

If you want to pass the key as an argument, you can.

jq --arg key popup '{($key): .menu|.[$key])}' tmp.json
  • Related