Анализ JSON Pocket API
Я пытаюсь проанализировать JSON из Pocket API, чтобы не отставать от моих закладок. JSON, полученный после запроса curl, выглядит следующим образом:
"list": {
"1548784635": {
"item_id": "1548784635",
"resolved_id": "1548784635",
"given_url": "https://stackru.com/questions/28164849/using-jq-to-par
se-and-display-multiple-fields-in-a-json-serially",
"given_title": "Using jq to parse and display multiple fields in a json se
rially - Stack Ov",
"favorite": "0",
"status": "0",
"time_added": "1542244328",
"time_updated": "1542244341",
"time_read": "0",
"time_favorited": "0",
"sort_id": 0,
"resolved_title": "Using jq to parse and display multiple fields in a json
serially",
"resolved_url": "https://stackru.com/questions/28164849/using-jq-to-
parse-and-display-multiple-fields-in-a-json-serially",
"excerpt": "Using jq I'd like to display first and last name serially. Lik
e so - You can use addition to concatenate strings.",
"is_article": "1",
"is_index": "0",
"has_video": "0",
"has_image": "1",
"word_count": "313",
"lang": "en",
"top_image_url": "https://cdn.sstatic.net/Sites/stackru/img/apple-to
uch-icon@2.png?v=73d79a89bded",
"tags": {
"fields": {
"item_id": "1548784635",
"tag": "fields"
},
"jq": {
"item_id": "1548784635",
"tag": "jq"
},
"multiple": {
"item_id": "1548784635",
"tag": "multiple"
}
},
"authors": {
"45850780": {
"item_id": "1548784635",
"author_id": "45850780",
"name": "abraham",
"url": "https://stackru.com/users/26406/abraham"
},
"82251593": {
"item_id": "1548784635",
"author_id": "82251593",
"name": "San",
"url": "https://stackru.com/users/3713971/san"
}
},
"image": {
"item_id": "1548784635",
"src": "https://stackru.com/images/86be011357b06766132fc500a8e0c3165da821ad.jpg?s=32&g=1",
"width": "32",
"height": "32"
},
"images": {
"1": {
"item_id": "1548784635",
"image_id": "1",
"src": "https://stackru.com/images/86be011357b06766132fc500a8e0c3165da821ad.jpg?s=32&g=1",
"width": "32",
"height": "32",
"credit": "",
"caption": ""
}
},
"domain_metadata": {
"name": "Stack Overflow",
"logo": "https://logo.clearbit.com/stackru.com?size=800",
"greyscale_logo": "https://logo.clearbit.com/stackru.com?size=800&
greyscale=true"
},
"listen_duration_estimate": 121
},
...
Я пытаюсь получить вывод, чтобы выглядеть так с URI над тегами (пытается преобразовать в CSV):
https://stackru.com/questions/28164849/using-jq-to-parse-and-display-multiple-fields-in-a-json-serially
fields, jq, multiple
Я пробовал это, но теги вложены (потребительский ключ и access_token отредактированы):
curl https://getpocket.com/v3/get --insecure -X POST -H "Content-Type: application/json" -H "X-Accept: application/json" -d "{\"consumer_key\":\"*\", \"access_token\":\"*\", \"detailType\":\"complete\"}" | jq '.list[] | "\(.given_url) \(.tags)"'
2 ответа
Используя ваш пример ввода после исправления, чтобы сделать его действительным JSON:
jq -r '.list[] | [.given_url] + (.tags|keys_unsorted) | @csv' input.json
выходы:
"https://stackru.com/questions/28164849/using-jq-to-parse-and-display-multiple-fields-in-a-json-serially","fields","jq","multiple"
Это действительно CSV. Если вам не нужны все двойные кавычки, вы можете использовать интерполяцию строк, как в вашей попытке.
Я добавил? Это работает (даже для записей без тегов). Access_token и consumer_key отредактированы в команде curl.
curl https://getpocket.com/v3/get --insecure -X POST -H "Content-Type: application/jsonkey\":\"*\", \"access_token\":\"*\", \"detailType\":\"complete\"}" | jq -r '.list[] | [.given_url] + (.tags|keys_unsorted?) | @csv'
Из руководства JQ:
.[]?
Like .[], but no errors will be output if . is not an array or object.