如何将一个大json文件拆分为多个较小的文件?

时间:2020-05-26 22:46:49

标签: python json

我有一个巨大的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-,然后是该键的值。

这有可能吗?

1 个答案:

答案 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)

当然,如果您的文件确实很大(太大而无法容纳到内存中),则此操作将无效。