JSONDecodeError при чтении json данных из подпроцесса python в Ubuntu 19.10 - PullRequest
0 голосов
/ 11 февраля 2020

Я выполнил приведенный ниже фрагмент кода в UBUNTU 16.04 , он работает нормально и дает ожидаемый JSON вывод. Но этот же код выдает json .decoder.JSONDecodeError: Дополнительные данные: in Ubuntu 19.10 и Windows 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. В то время как окно просто добавляет (,) к примеру}: (},). Посмотрите на прикрепленное изображение для лучшего понимания. Потому что запятая (,) JSON декодер выбрасывает ОШИБКА: дополнительно данные в конце json. Есть ли способ добавить дополнительную строку в конец пакетов tshark в windows 10.

Windows 10 image windows 10

Ubuntu image Ubuntu 16.04

...