我有一个巨大的json文件,其中包含以下内容。为简化起见,我删除了一堆东西以使其更易于理解。我有一个templates
json数组,其中有许多json对象。
{
"templates": [
{
"clientId": 1234,
"key1": "value1",
...
},
{
"clientId": 9876,
"key2": "value2",
...
},
{
"textGroup": 87,
"key3": "value3",
...
},
{
"textGroup": 90,
"key4": "value4",
...
}
]
}
现在,我想读取一个大的json文件,并将其拆分为较小的多个json文件。较小文件的总数将是templates
中json对象的总数。如您所见,我有两个clientId
json对象和两个textGroup
json对象,因此生成的较小json文件总数为4。
每个json对象是一个不同的文件名,其内容作为json对象的值。以下是每个文件的生成方式。
文件名应为:
processConfig-client-1234.json
该文件中的内容:
{
"templates": [
{
"clientId": 1234,
"key1": "value1",
...
}
]
}
与其他人类似:
processConfig-client-9876.json
{
"templates": [
{
"clientId": 9876,
"key2": "value2",
...
}
]
}
processConfig-textGroup-87.json
{
"templates": [
{
"textGroup": 87,
"key3": "value3",
...
}
]
}
processConfig-textGroup-90.json
{
"templates": [
{
"textGroup": 90,
"key4": "value4",
...
}
]
}
文件名将始终具有processConfig-
,后跟client-
或textGroup-
,然后是该键的值。
这有可能吗?
答案 0 :(得分:1)
import json
dct = json.load('inputfile.json')
for subdct in dct['templates']:
if "textGroup" in subdct:
fname = "processConfig-textGroup-{}.json".format(subdct["textGroup"])
elif "clientId" in subdct:
fname = "processConfig-client-{}.json".format(subdct["clientId"])
with open(fname, 'w') as f:
json.dump({'templates': [subdct]}, f)
当然,如果您的文件确实很大(太大而无法容纳到内存中),则此操作将无效。