I\'m trying to parse environment variables from the JSON output of docker inspect. Annoyingly, those environment variables aren\'t returned as useful key-value
To convert an array of two strings (e.g. ["k", "v"]) to an object, you can write:
{ (.[0]) : .[1] }
So you'll want to write something like:
map(.Config.Env |= (map( split("=") | { (.[0]) : .[1] } ) | add))
Abstracting out the array-to-object functionality makes the solution a bit more digestible:
def a2o: map( split("=") | { (.[0]) : .[1] } ) | add;
map(.Config.Env |= a2o)
match or capture instead of splitSince it is possible for an "=" character to appear in the "value" part of each var=value string, using split naively might not be such a great idea. Here is a more robust alternative, assuming your jq supports regular expressions:
match("([^=]*)=(.*)") | .captures | {(.[0].string) : .[1].string}
Or, slightly more succinctly and perhaps elegantly:
[capture( "(?[^:]*):(?.*)" )] | from_entries
index/1If your jq does not have regex support, you could use index/1, along these lines:
index("=") as $ix | {(.[:$ix]) : .[$ix+1:]}