Home > Back-end >  iterate on key to get the contents of the key
iterate on key to get the contents of the key

Time:04-11

IF I have json that looks like

{
    "items": [
        {
            "name": "issue1",
            "spec": {
                "config": {
                    "setting1": abc,
                    "setting2": {
                        "name": "xyz"
                    }
                },
                "files": {
                    "name": "cde",
                    "path": "/home"
                },
                "program": {
                    "name": "apache"
                }
            }
        }
    ]
}

and I want to have iteration at .items[0].spec where the key config,files,program's contents can be shown.. something like

config:
{
    "setting1": abc,
    "setting2": {
        "name": "xyz"
    }
}

files:
{
    "name": "cde",
    "path": "/home"
}

program:
{
    "name": "apache"
}

and there might be things more or less than config/files/programs for each items.

I know that I can get the list of keys by jq -r '.items[0].spec| to_entries[].key' but not sure about formating the output and getting the contents of .items[].spec.xxxxx like above.

I also got very close by jq -r '{test: .items[0].spec | with_entries(select(.value != null)) }' but I want to seperate each item per key

Also this got me even closer! but how do you get the json syntax of the object to display uncompressed?

jq -r '.items[].spec | keys[] as $k | "\($k):\n \(.[$k])"'

CodePudding user response:

The "," operator is the magic ingredient you seem to be looking for:

.items[].spec | keys[] as $k | $k, .[$k]
  • Related