【发布时间】:2020-06-25 12:07:27
【问题描述】:
我正在尝试使用 re.split 方法解析包含多个 json 对象的字符串。但是我找不到我想要的模式。
收到的字符串
'{"project":"rapidjson","stars":10}{"project":"rapidjson","stars":10}{"project":"rapidjson","stars":10}'
我的解析代码
def parseMultipleJson(multijson):
print(re.split('[}+{]', multijson))
预期结果
['{"project":"rapidjson","stars":10}','{"project":"rapidjson","stars":10}', '{"project":"rapidjson","stars":10}']
实际结果
['', '"project":"rapidjson","stars":10', '', '"project":"rapidjson","stars":10', '', '"project":"rapidjson","stars":10', '']
我知道我弄乱了模式,但我已经尝试了一段时间的其他变体,但我找不到达到预期结果的方法
【问题讨论】:
-
你从哪里得到那个字符串?修改生产者以给你一些合理的工作可能会容易得多。
-
@chepner 不太可行:字符串来自管道,因此如果接收进程崩溃并重新启动,管道将充满这些东西。我什至不能告诉接收器只读取固定数量的字节,因为 json 的大小永远不会固定。我也不能真的让接收过程浪费太多毫秒来检索旧数据,它必须尽可能快
-
你如何保证你只从管道中读取完整的 JSON 对象?在某些时候,您似乎已经可以识别从结束一个对象的
}和开始另一个对象的{之间的转换。由于 ASCII 控制字符不能直接出现在 JSON 中,因此您可以使用它们中的任何一个来分隔流中的对象。 -
@chepner mm,我想我会尝试以其他方式解析字符串。谢谢!
标签: python string parsing split python-re