【发布时间】:2020-03-12 19:32:10
【问题描述】:
我正在使用pyshark 并尝试打印出JSON。这是我的代码:
import pyshark
import json
capture = pyshark.LiveCapture(interface='eth0', bpf_filter='http', use_json=True)
for packet in capture.sniff_continuously(packet_count=10):
print(json.loads(str(packet)))
但我得到了错误:
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
此外,当简单地运行 print(packet) 时,它不是 JSON。
更新
我试过这个:
cmd = 'tshark -i en0 -f http -T json -x -l --no-duplicate-keys'
args = shlex.split(cmd)
tshark = subprocess.Popen(args, stdout=subprocess.PIPE)
for line in io.TextIOWrapper(tshark.stdout, encoding="utf-8"):
print("test: %s" % line.rstrip())
但是打印出JSON 对象的每一行而不是一个组合对象,猜测是因为管道。
可以更改此设置,以便每个数据包都有实际的 JSON 对象吗?
【问题讨论】:
-
如您的错误所示,问题出在
packet即None,甚至不是string类型。所以你应该首先检查为什么capture.sniff_continuously(packet_count=10)正在返回或产生None值。 -
在
print之前添加下面的if packet is not None:会引发同样的错误。 -
无论如何,我认为我的问题一般是了解如何在使用
use_json=True时正确解析来自pyshark的 JSON。
标签: python json python-3.x tshark pyshark