python

时间:2015-05-29 07:09:10

标签: python json

当我尝试解析JSON转储时,我收到此属性错误

Traceback (most recent call last):
          File "Security_Header_Collector.py", line 120, in <module>
            process(sys.argv[-1])
          File "Security_Header_Collector.py", line 67, in process
            server_details = json.load(header_final)
          File "/usr/lib/python2.7/json/__init__.py", line 274, in load
            return loads(fp.read(),
        AttributeError: 'str' object has no attribute 'read'

脚本:

finalJson[App[0]] = headerJson
            header_final=json.dumps(finalJson,indent=4)
            #print header_final
            #json_data=open(header_final)
            server_details = json.load(header_final)
            with open("Out.txt",'wb') as f :
                    for appid, headers in server_details.iteritems():
                            htypes = [h for h in headers if h in (
                             'content-security-policy', 'x-frame-options',
                            'strict-transport-security', 'x-content-type-options',
                            'x-xss-protection')]
                            headers='{},{}'.format(appid, ','.join(htypes))
                            f.write(headers+'\n')
            f.close()

3 个答案:

答案 0 :(得分:3)

json.dumps返回一个JSON格式的字符串,但json.load期望得到类似文件的对象,而不是字符串。

解决方案:在代码中使用json.loads代替json.load

答案 1 :(得分:0)

您的代码

header_final=json.dumps(finalJson,indent=4)

会给你一个字符串,

您必须使用json.loads将字符串转换为 json

答案 2 :(得分:0)

json.load - 用于文件/对象 json.loads - 用于字符串或数组元素。

您也可以考虑立即以HEREDOC格式化形式创建整个JSON,然后应用转义 - 这样可以更轻松地验证JSON格式。