一、問題
1.1、Charles中導出會話(比如導出后的文件為 a.har 文件)
1.2、把 a.har 文件導入Charles中(有時會報如下圖所示的錯誤)
Import Failed | MalformedJson: Unterminated object at line 1 column xxx path $.log.entries[1].response.content.text
二、分析
2.1、其實charles導出的文件 內容是一個json格式的文件
2.2、response.content.text 的字符串中的雙引號在導出時未做轉義 所以在導入時不能識別為json格式 即報錯
三、解決
判斷 response.content.text 字符串中是否包含雙引號 “ " ” 若有 則替換為 ” \" “ 也就是轉個義即可
四、代碼
if __name__ == '__main__': # charles導出的文件(僅需修改這個即可) charles_export_file = 'C:\\Users\Administrator\Desktop\charles導出的文件.har' with open(charles_export_file, encoding='utf-8') as f: result = f.readlines() result_json = json.loads(result[0]) entries = result_json['log']['entries'] for i in entries: for i_header in i['response']['headers']: for i_key, i_value in i_header.items(): if i_value == 'Content-Type' and i_header['value'].startswith('text/'): s = '【已替換】type:{}'.format(i_header['value']) print(s.ljust(20), i['request']['url']) # 查找text中的雙引號 並轉義 response_str_old = str(i['response']['content']['text']) response_str_new = response_str_old.replace('"', '\\"') break new_file = '' file_list = charles_export_file.split('\\') file_list[len(file_list) - 1] = '可正常導入_{}'.format(file_list[len(file_list) - 1]) for i in file_list: new_file += i new_file += '\\' # 刪除最后一個 \ new_file = new_file[:-1] result_json = json.dumps(result_json) with open(new_file, 'w') as f: f.writelines(result_json)