Я выполнил приведенный ниже фрагмент кода в 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
Ubuntu 16.04