gpt4 book ai didi

json - 使用jq,如何将一个非常大的JSON文件拆分为多个文件,每个文件都有特定数量的对象?

转载 作者:行者123 更新时间:2023-12-04 14:38:43 25 4
gpt4 key购买 nike

我有一个很大的JSON文件,我猜测有400万个对象。每个顶层都有嵌套的几个层次。我想将其拆分为每个10000个顶级对象的多个文件(保留每个文件的内部结构)。 jq应该能够做到这一点吗?我不确定如何。

像这样的数据:

[{
"id": 1,
"user": {
"name": "Nichols Cockle",
"email": "ncockle0@tmall.com",
"address": {
"city": "Turt",
"state": "Thị Trấn Yên Phú"
}
},
"product": {
"name": "Lychee - Canned",
"code": "36987-1526"
}
}, {
"id": 2,
"user": {
"name": "Isacco Scrancher",
"email": "iscrancher1@aol.com",
"address": {
"city": "Likwatang Timur",
"state": "Biharamulo"
}
},
"product": {
"name": "Beer - Original Organic Lager",
"code": "47993-200"
}
}, {
"id": 3,
"user": {
"name": "Elga Sikora",
"email": "esikora2@statcounter.com",
"address": {
"city": "Wenheng",
"state": "Piedra del Águila"
}
},
"product": {
"name": "Parsley - Dried",
"code": "36987-1632"
}
}, {
"id": 4,
"user": {
"name": "Andria Keatch",
"email": "akeatch3@salon.com",
"address": {
"city": "Arras",
"state": "Iracemápolis"
}
},
"product": {
"name": "Wine - Segura Viudas Aria Brut",
"code": "51079-385"
}
}, {
"id": 5,
"user": {
"name": "Dara Sprowle",
"email": "dsprowle4@slate.com",
"address": {
"city": "Huatai",
"state": "Kaduna"
}
},
"product": {
"name": "Pork - Hock And Feet Attached",
"code": "0054-8648"
}
}]

这是一个完整的对象:
{
"id": 1,
"user": {
"name": "Nichols Cockle",
"email": "ncockle0@tmall.com",
"address": {
"city": "Turt",
"state": "Thị Trấn Yên Phú"
}
},
"product": {
"name": "Lychee - Canned",
"code": "36987-1526"
}
}

每个文件都是指定数量的对象。

最佳答案

[编辑:此答案已根据对该问题的修订进行了修订。]

使用jq解决问题的关键是-c命令行选项,该选项以JSON-Lines格式(即,在当前情况下,每行一个对象)产生输出。然后,您可以使用awksplit之类的工具将这些行分布在多个文件中。

如果文件不是太大,那么最简单的方法是使用以下方法启动管道:

jq -c '.[]' INPUTFILE

如果文件太大而无法容纳在内存中,则可以使用jq的流解析器,如下所示:
jq -cn --stream 'fromstream(1|truncate_stream(inputs))'

有关流解析器的进一步讨论,请参见jq常见问题解答中的相关部分: https://github.com/stedolan/jq/wiki/FAQ#streaming-json-parser

分区

有关划分第一步中产生的输出的不同方法,请参见 How to split a large text file into smaller files with equal number of lines?

如果要求每个输出文件都是对象数组,那么我可能会使用 awk在一个步骤中执行分区和重构,但是还有许多其他合理的方法。

如果输入是JSON对象序列

作为引用,如果原始文件由JSON对象的流或序列组成,则适当的调用将是:
jq -n -c inputs INPUTFILE

以这种方式使用 inputs可以任意有效地处理许多对象。

关于json - 使用jq,如何将一个非常大的JSON文件拆分为多个文件,每个文件都有特定数量的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49808581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com