tag = pp.Combine(lang + pp.Word(pp.alphas, pp.alphanums) + pp.Optional(dot +
    cstr) + rang).setName('tag')
exp = pp.Forward()
key_value = pp.Group(tag + exp)
number = pp.Regex('[+-]?\\d+(\\.\\d*)?').setName('number')
exp <<= number | cstr | key_value | pp.Group(lbra + pp.ZeroOrMore(exp) + rbra)
Как разобрать гибридный файл JSON-XML в Python