holdtom
您可以使用json.JSONDecoder.raw_decode任意解码大量“堆叠”JSON字符串(只要它们可以适合内存)。raw_decode一旦它有一个有效的对象就停止,并返回不在解析对象中的最后一个位置。它没有记录,但您可以将此位置传回,raw_decode并从该位置再次开始解析。不幸的是,Python json模块不接受具有前缀空格的字符串。所以我们需要搜索以找到文档的第一个非空白部分。from json import JSONDecoder, JSONDecodeErrorimport reNOT_WHITESPACE = re.compile(r'[^\s]')def decode_stacked(document, pos=0, decoder=JSONDecoder()): while True: match = NOT_WHITESPACE.search(document, pos) if not match: return pos = match.start() try: obj, pos = decoder.raw_decode(document, pos) except JSONDecodeError: # do something sensible if there's some error raise yield objs = """{"a": 1} [1, 2]"""for obj in decode_stacked(s): print(obj)打印:{'a': 1}[1, 2]