【Charles】【完美解决】导入文件时报错 Import Failed | MalformedJson: Unterminated object at line 1 column xxx path $.log.entries[1].response.content.text

一、问题

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:\UsersAdministratorDesktopcharles导出的文件.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)
如果忍耐算是坚强 我选择抵抗 如果妥协算是努力 我选择争取
原文地址:https://www.cnblogs.com/danhuai/p/14336753.html