The Algolia-powered Hacker News API returns nested comment threads that look like this: https://hn.algolia.com/api/v1/items/27941108
(For this story: https://news.ycombinator.com/item?id=27941108)
{
"id": 27941108,
"created_at": "2021-07-24T14:15:05.000Z",
"type": "story",
"author": "edward",
"title": "Fun with Unix domain sockets",
"url": "https://simonwillison.net/2021/Jul/13/unix-domain-sockets/",
"children": [
{
"id": 27942287,
"created_at": "2021-07-24T16:31:18.000Z",
"type": "comment",
"author": "DesiLurker",
"text": "<p>one lesser known...",
"children": []
},
{
"id": 27944615,
"created_at": "2021-07-24T21:26:33.000Z",
"type": "comment",
"author": "galaxyLogic",
"text": "<p>I read this from Wikipedia...",
"children": [
{
"id": 27944746,
"created_at": "2021-07-24T21:49:07.000Z",
"type": "comment",
"author": "hughrr",
"text": "<p>Yes although I ...",
"children": []
}
]
}
]
}
I wanted to flatten this into an array of items so I could send it to sqlite-utils insert
. This recipe worked:
curl 'https://hn.algolia.com/api/v1/items/27941108' \
| jq '[recurse(.children[]) | del(.children)]' \
| sqlite-utils insert hn.db items - --pk id
The jq
recipe here is:
[recurse(.children[]) | del(.children)]
The first recurse(.children[])
recurses through a list of everything in a .children
array.
The | del(.children)
then deletes that array from the returned objects.
Wrapping it all in [ ]
ensures the overall result will be an array.
Applied against the above example, this returns:
[
{
"id": 27941108,
"created_at": "2021-07-24T14:15:05.000Z",
"type": "story",
"author": "edward",
"title": "Fun with Unix domain sockets",
"url": "https://simonwillison.net/2021/Jul/13/unix-domain-sockets/"
},
{
"id": 27942287,
"created_at": "2021-07-24T16:31:18.000Z",
"type": "comment",
"author": "DesiLurker",
"text": "<p>one lesser known..."
},
{
"id": 27944615,
"created_at": "2021-07-24T21:26:33.000Z",
"type": "comment",
"author": "galaxyLogic",
"text": "<p>I read this from Wikipedia..."
},
{
"id": 27944746,
"created_at": "2021-07-24T21:49:07.000Z",
"type": "comment",
"author": "hughrr",
"text": "<p>Yes although I ..."
}
]
Created 2021-07-24T20:58:35-07:00 · Edit