【发布时间】:2020-10-03 17:28:19
【问题描述】:
我打开了一个套接字,我想从中读取一些 json 数据。问题是标准库中的json 模块只能从字符串解析(load 只读取整个文件并在内部调用loads)它甚至看起来在模块内部一直都取决于参数细绳。
这是套接字的一个真正问题,因为您永远无法将其全部读取为字符串,并且在实际解析它之前您不知道要读取多少字节。
所以我的问题是:是否有(简单而优雅的)解决方法?是否有另一个可以增量解析数据的 json 库?值得自己写吗?
编辑:它是 XBMC jsonrpc api。没有邮件信封,我无法控制格式。每条消息可以在一行或多行。
我可以编写一些只需要某种形式的 getc 函数并使用s.recv(1) 提供它的简单解析器,但这不是一个非常 Pythonic 的解决方案,我有点懒惰这样做:-)
【问题讨论】:
-
这个套接字流是否包含信封?大多数套接字协议可以让您了解顺流而下的内容的大小。您是否正在尝试连接到众所周知的 json 套接字协议?您是否可以控制套接字协议?最简单的方法是知道每条消息的大小(如 HTTP 有 Content-Length 标头)。否则,您必须在数据进入时对其进行解析以了解数据何时开始和何时结束,而标准库无法帮助您。