一、问题
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)