How to get key names from JSON using jq How to get key names from JSON using jq unix unix

How to get key names from JSON using jq


You can use:

jq 'keys' file.json

Complete example

$ cat file.json{ "Archiver-Version" : "Plexus Archiver", "Build-Id" : "", "Build-Jdk" : "1.7.0_07", "Build-Number" : "", "Build-Tag" : "", "Built-By" : "cporter", "Created-By" : "Apache Maven", "Implementation-Title" : "northstar", "Implementation-Vendor-Id" : "com.test.testPack", "Implementation-Version" : "testBox", "Manifest-Version" : "1.0", "appname" : "testApp", "build-date" : "02-03-2014-13:41", "version" : "testBox" }$ jq 'keys' file.json[  "Archiver-Version",  "Build-Id",  "Build-Jdk",  "Build-Number",  "Build-Tag",  "Built-By",  "Created-By",  "Implementation-Title",  "Implementation-Vendor-Id",  "Implementation-Version",  "Manifest-Version",  "appname",  "build-date",  "version"]

UPDATE: To create a BASH array using these keys:

Using BASH 4+:

mapfile -t arr < <(jq -r 'keys[]' ms.json)

On older BASH you can do:

arr=()while IFS='' read -r line; do   arr+=("$line")done < <(jq 'keys[]' ms.json)

Then print it:

printf "%s\n" ${arr[@]}"Archiver-Version""Build-Id""Build-Jdk""Build-Number""Build-Tag""Built-By""Created-By""Implementation-Title""Implementation-Vendor-Id""Implementation-Version""Manifest-Version""appname""build-date""version"


You need to use jq 'keys[]'. For example:

echo '{"example1" : 1, "example2" : 2, "example3" : 3}' | jq 'keys[]'

Will output a line separated list:

"example1""example2""example3"


To get the keys on a deeper node in a JSON:

echo '{"data": "1", "user": { "name": 2, "phone": 3 } }' | jq '.user | keys[]'"name""phone"