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
 
                        
The problem is not because of
/in the.Namesfield, but in your expression. For filters like@csvor@tsvto work, the values need to be in a scalar format and in an array. But your expression.Namein of typearray.So basically you are passing this result to the
@tsvfunctioninstead of
So modifying your filter, you can do below for the JSON in question.
or if you still want to remove the
/, usegsub()function