Файлы на которых приводятся примеры:
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