Поскольку вы используете Python, вы можете найти быстрый способ создания прототипа парсера для этого формата (который не является JSON, кстати): pyparsing:
src = """
supportedBandCombination-r10{
BandCombinationParameters-r10{
BandParameters-r10{
bandEUTRA-r101,
bandParametersUL-r10{
CA-MIMO-ParametersUL-r10{
ca-BandwidthClassUL-r10a
}
},
bandParametersDL-r10{
CA-MIMO-ParametersDL-r10{
ca-BandwidthClassDL-r10a,
supportedMIMO-CapabilityDL-r10twoLayers
}
}
}
},
BandCombinationParameters-r10{
BandParameters-r10{
bandEUTRA-r103,
bandParametersUL-r10{
CA-MIMO-ParametersUL-r10{
ca-BandwidthClassUL-r10a
}
},
bandParametersDL-r10{
CA-MIMO-ParametersDL-r10{
ca-BandwidthClassDL-r10a,
supportedMIMO-CapabilityDL-r10twoLayers
}
}
}
}
}"""
import pyparsing as pp
LBRACE,RBRACE = map(pp.Suppress, "{}")
term = pp.Word(pp.alphas, pp.alphanums+'-')
term_group = pp.Forward()
term_group <<= pp.Group(term + pp.Group(LBRACE
+ pp.delimitedList(term_group | term)
+ RBRACE))
term_group.parseString(src).pprint()
Печать
[['supportedBandCombination-r10',
[['BandCombinationParameters-r10',
[['BandParameters-r10',
['bandEUTRA-r101',
['bandParametersUL-r10',
[['CA-MIMO-ParametersUL-r10', ['ca-BandwidthClassUL-r10a']]]],
['bandParametersDL-r10',
[['CA-MIMO-ParametersDL-r10',
['ca-BandwidthClassDL-r10a',
'supportedMIMO-CapabilityDL-r10twoLayers']]]]]]]],
['BandCombinationParameters-r10',
[['BandParameters-r10',
['bandEUTRA-r103',
['bandParametersUL-r10',
[['CA-MIMO-ParametersUL-r10', ['ca-BandwidthClassUL-r10a']]]],
['bandParametersDL-r10',
[['CA-MIMO-ParametersDL-r10',
['ca-BandwidthClassDL-r10a',
'supportedMIMO-CapabilityDL-r10twoLayers']]]]]]]]]]]
НО, pyparsing выполняется не быстро и займет много времени, чтобы просмотреть ваш файл размером 200 МБ.
Pyparsing также плохо подходит для потоковой передачи, но он захочет проанализировать всю строку сразу. Это может или не может быть практичным с вашим файлом 200 МБ. Что вы можете сделать, это попробовать прочитать строку за раз, пока вы не получите анализируемую структуру, затем проанализировать ее и двигаться дальше. Или читайте 100 строк за раз, пока не получите анализируемую структуру, затем проанализируйте ее, оставьте неразобранную часть, а затем получите еще 100 строк. Но во всем этом ограничитель производительности будет синтаксическим анализатором, поэтому вы захотите свести к минимуму количество неправильных синтаксических анализов при попытке создать успешно разбираемую строку.