4 ms·
Hello. The JSON dump looks something like this: { users: { "userid1": {...}, ... }, ... } I have tried jq stream parser to split
by asadlionpk 9y ago
Hello. The JSON dump looks something like this:
{
users: {
"userid1": {...},
...
},
...
}
I have tried jq stream parser to split the big dump into files like:
- users.json
- chatrooms.json
- ...
So I can then work on individual nodes.
But jq fails silently after 12-24 hours of processing. I am still researching this in free time.
If I can just get the keys (like "userid1") I can do the rest from firebase itself.
- rudasn 9y agoThe parser would have to parse the whole thing before being able to split it. You could to the splitting yourself (it's just plain text) and create multiple files whose contents is just an array in the format: ``` [ {}, ... ] ``` Then you can use JSONStream to load each of those files individually and map/reduce on the contents.
- mbell 9y agoI would think something like this would work: cat input.json | jq -c --stream '. as $in | select(length == 2 and $in[0][0] == "users") | {}|setpath($in[0][1:]; $in[1])' > users.jsonlines Output would me a file that looks like this: {"userid1":{"name":"user1"}} {"userid2":{"name":"user2"}}
- asadlionpk 9y agoI think I have tried something similar. I will try this one too. Thanks a lot!
- vinceguidry 9y agoYou could loop through the file counting braces, storing line numbers. Then split the file along those line numbers. The smaller files might not have the exact formatting you need to run through a parser, but you should be able to manually adjust it then, hopefully.