我想使用ijson从串口读取对象。我可以从端口读取,并且我可以使用ijson从流中反序列化对象,但是使用串口的ijson并不是枚举任何东西。
这是我的代码示例:
self.serial_port = serial.Serial(
port=self.port_name, \
baudrate=115200, \
parity=serial.PARITY_NONE, \
stopbits=serial.STOPBITS_ONE, \
bytesize=serial.EIGHTBITS, \
timeout=None)
print 'start reading'
parser = ijson.parse(self.serial_port)
for prefix, event, value in parser:
print `value`
print 'stop reading'
我的输出只是
start reading
答案 0 :(得分:1)
尝试做:
import ijson
import sys
for x in ijson.parse(sys.stdin):
print(x)
您可以输入json,但在按两次Ctrl-D指示stdin结束之前,不会打印任何内容。
我还没有对它进行测试,但我怀疑你的串口发生了类似的情况:因为你的串口永远不会关闭,ijson不知道何时开始解析。根据您的串行库,我会尝试向python发送EOF或EOT字符,或者单独找到一种方法使其触发流的结束。
我可以考虑的一些选择:
inter_byte_timeout
仅从流答案 1 :(得分:0)
好的,我明白了。您必须将缓冲区大小设置为1。 所以,这有效......
objects = ijson.common.items(ijson.parse(self.serial_port, buf_size=1), 'item')
for o in objects:
print `o`
我的目标是能够接收无穷无尽的物体。我使用" [",然后发送逗号分隔的json对象列表,并用"]"终止列表来表示流的开始。每次在数组中完成一个对象时,迭代器就会循环。
完美无缺。
通过发送它进行测试(在对象中间的有意换行):
[{"foo": "bar"}, {"bar":
"foo"}]