Remove slash character in JSON response using jq

1.6k views Asked by At

Docker Engine API returns container name with / appended

{
    "Id": "8dfafdbc3a40",
    "Names": [
        "/boring_feynman"
    ],
    "Image": "ubuntu:latest",
    "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82",
    "Command": "echo 1",
    "Created": 1367854155,
    "State": "Exited",
    "Status": "Exit 0",
    "Ports": [{
        "PrivatePort": 2222,
        "PublicPort": 3333,
        "Type": "tcp"
    }],
    "Labels": {
        "com.example.vendor": "Acme",
        "com.example.license": "GPL",
        "com.example.version": "1.0"
    },
    "SizeRw": 12288,
    "SizeRootFs": 0,
    "HostConfig": {
        "NetworkMode": "default"
    },
    "NetworkSettings": {
        "Networks": {}
    },
    "Mounts": [{
        "Name": "fac362...80535",
        "Source": "/data",
        "Destination": "/data",
        "Driver": "local",
        "Mode": "ro,Z",
        "RW": false,
        "Propagation": ""
    }]
}

I want to remove the slash so the response can be used as a table in JQ:

jq -r '(["Names","Image"] | (., map(length*"-"))), (.[] | [.Names, .Image]) | @tsv'

Currently, when I run the above, I get:

jq: error (at <stdin>:1): array (["/boring_feynman"]) is not valid in a csv row
1

There are 1 answers

8
Inian On BEST ANSWER

The problem is not because of / in the .Names field, but in your expression. For filters like @csv or @tsv to work, the values need to be in a scalar format and in an array. But your expression .Name in of type array.

So basically you are passing this result to the @tsv function

[
  [
    "/boring_feynman"
  ],
  "ubuntu:latest"
]

instead of

[
  "/boring_feynman",
  "ubuntu:latest"
]

So modifying your filter, you can do below for the JSON in question.

jq -r '(["Names","Image"] | (., map(length*"-"))), ([.Names[], .Image]) | @tsv'

or if you still want to remove the /, use gsub() function

jq -r '(["Names","Image"] | (., map(length*"-"))), ([ (.Names[] | gsub("^/";"")), .Image]) | @tsv'