在Ubuntu19.10中从python子进程读取json数据时发生JSONDecodeError

在Ubuntu19.10中从python子进程读取json数据时发生JSONDecodeError,python,json,subprocess,ubuntu-16.04,tshark,Python,Json,Subprocess,Ubuntu 16.04,Tshark,我在Ubuntu16.04中执行了下面的一段代码,它运行良好,并给出了正确的预期JSON输出。但是相同的代码抛出JSON.decoder.jsondecoderror:Extra data:在Ubuntu19.10和Windows 10中。这里有编码问题吗。我已经尝试过使用JSON.dumps(),但问题仍然存在 import subprocess import json global allkeyval allkeyval={} cmd = "tshark -V -l -T json" p

我在Ubuntu16.04中执行了下面的一段代码,它运行良好,并给出了正确的预期JSON输出。但是相同的代码抛出JSON.decoder.jsondecoderror:Extra data:Ubuntu19.10Windows 10中。这里有编码问题吗。我已经尝试过使用JSON.dumps(),但问题仍然存在

import subprocess
import json

global allkeyval
allkeyval={}

cmd = "tshark -V -l -T json"
p = subprocess.Popen(cmd, stdout=subprocess.PIPE,stdin=subprocess.PIPE,universal_newlines=True,shell=True)
json_str = ""

for line  in p.stdout:

    if line.strip() == '[':
        continue
    if line.strip() in [',', ']']:
        #newJson = json_str.replace('\n', '\r\n')
        json_obj = json.loads(json_str.strip())
        source_filter = json_obj['_source']['layers']
        keyval=source_filter.items()
        allkeyval={}
        a=unwrap(keyval,{})


        json_str = ""

        print(a)

    else:
        json_str += line


p.stdout.close()
p.wait()

def unwrap(keyval,temp):

    for key1,value1 in keyval:
        if type(value1)== str :
            temp[key1]=value1

        else:
            unwrap(value1.items(),temp)


    return(temp)
调试信息: 调试后,我发现ubuntu在每个tshark数据包的末尾为逗号(,)添加了额外的一行。而window只是将(,)附加到}示例:(},)。请查看附加的图像以便更好地理解。由于逗号(,)的原因,JSON解码器抛出错误:JSON结尾的额外数据。在Windows10中,有没有办法在tshark数据包的末尾添加额外的行

视窗10


ubuntu 16.04

能否添加完整的stacktrace?是否尝试打印输出以进行检查?我已经尝试过使用JSON.dumps(),但问题仍然存在。你试着在哪里使用它?我建议阅读以下文章: