Файлы на которых приводятся примеры:
ex1.json
{ "product": "Live JSON generator", "version": 3.1, "releaseDate": "2014-06-25T00:00:00.000Z", "demo": true, "person": { "id": 12345, "name": "John Doe", "phones": { "home": "800-123-4567", "mobile": "877-123-1234" }, "email": [ "jd@example.com", "jd@example.org" ], "dateOfBirth": "1980-01-02T00:00:00.000Z", "registered": true, "emergencyContacts": [ { "name": "Jane Doe", "phone": "888-555-1212", "relationship": "spouse" }, { "name": "Justin Doe", "phone": "877-123-1212", "relationship": "parent" } ] } }
Q: Как вывести все ключи?
A: Следующая команда выводит все ключи входящие в уровни от 0 до 1.
$ cat ex1.json | jq -c '[paths|.[0:1]]|unique'
[["demo"],["person"],["product"],["releaseDate"],["version"]]
Q: Как извлечь все значения с заданным именем ключа?
A: Следующая команды проходит рекурсивно по файлу ex1.json и выводит значения всех ключей, которые называются phone.
$ cat ex1.json | jq 'recurse(.[]?) | objects | if(has("phone")) then .phone else empty end'
"888-555-1212" "877-123-1212"
Q: Как сравнить значения конкретного поля у двух файлов?
A: icdiff <(jq '.firstName' example1.json) <(jq '.firstName' example2.json) --whole-file