将大型哈希结构 JSON 文件拆分为多个较小的文件
Split large hash-structured JSON file into multiple smaller files
我正在处理一个非常大的 JSON 文件,它具有类似散列的结构:
{
"1893": {
"foo": {
"2600": {
...[snip]...
},
"3520": {
...[snip]...
}
}
"id": "foobar"
},
"123": {
"bar": {
"4989": {
...[snip]...
},
"0098": {
...[snip]...
}
}
"id": "foobaz"
},
...[snip]...
"5553": {
"baz: {
"2600": {
...[snip]...
},
"3520": {
...[snip]...
}
}
"id": "bazqux"
}
}
(此文件类似于 Stripe's migration mapping file)
我想将此文件拆分为多个较小的文件,这些文件显然是有效的 JSON 文件。由于 "root" 是一个散列,我并不关心这个文件是如何拆分的,只要生成的文件具有大致相等的项目数即可。
我试着查看 JQ,但我似乎没有掌握如何正确地实现它。将不胜感激关于工作 JQ 解决方案的任何指导,或任何其他可以帮助解决此问题的工具。
我已经成功地使用 JQ 烹饪了一些东西:
检查 $file
的项目数后:
jq -c "length" < $file
我们建立切片索引($from
和$to
),然后将切片保存到$output
:
jq -c "to_entries[$from:$to] | from_entries" < $file > $output
我正在处理一个非常大的 JSON 文件,它具有类似散列的结构:
{
"1893": {
"foo": {
"2600": {
...[snip]...
},
"3520": {
...[snip]...
}
}
"id": "foobar"
},
"123": {
"bar": {
"4989": {
...[snip]...
},
"0098": {
...[snip]...
}
}
"id": "foobaz"
},
...[snip]...
"5553": {
"baz: {
"2600": {
...[snip]...
},
"3520": {
...[snip]...
}
}
"id": "bazqux"
}
}
(此文件类似于 Stripe's migration mapping file)
我想将此文件拆分为多个较小的文件,这些文件显然是有效的 JSON 文件。由于 "root" 是一个散列,我并不关心这个文件是如何拆分的,只要生成的文件具有大致相等的项目数即可。
我试着查看 JQ,但我似乎没有掌握如何正确地实现它。将不胜感激关于工作 JQ 解决方案的任何指导,或任何其他可以帮助解决此问题的工具。
我已经成功地使用 JQ 烹饪了一些东西:
检查
$file
的项目数后:jq -c "length" < $file
我们建立切片索引(
$from
和$to
),然后将切片保存到$output
:jq -c "to_entries[$from:$to] | from_entries" < $file > $output