解析json文件ValueError

时间:2015-07-30 14:48:51

标签: python json python-2.7

您好我有一个json文件,想要解析它。我写下了以下代码:

import json as simplejson
import os

for filename in os.listdir('/home/Documents/test/'):
    with open('/home/Documents/test/' + filename) as file:
            data = simplejson.load(file)
            try:
                if(data['scans']['Microsoft']['detected']==True):
                    label = data['scans']['Microsoft']['result']
                    print label
            except (ValueError, KeyError, TypeError):
                print "JSON format error"

但是我收到了以下错误:

ValueError: Expecting property name: line 1 column 1 (char 1)

你能帮我解决问题吗?我认为因为我的文件包含unicode字符,但我不知道如何解决它。

这是我的json文件的一部分:

{u'md5': u'0a1cdc568b4da42cb7acce45834eb4ba',
 u'permalink': u'https://www.virustotal.com/file/a0acc0feb1da7f571faaa7dc3b7ebcd1b856710d1f44cd6e0b57ec5a9bc70038/analysis/1383102973/',
 u'positives': 42,
 u'resource': u'0A1CDC568B4DA42CB7ACCE45834EB4BA',
 u'response_code': 1,
 u'scan_date': u'2013-10-30 03:16:13',
 u'scan_id': u'a0acc0feb1da7f571faaa7dc3b7ebcd1b856710d1f44cd6e0b57ec5a9bc70038-1383102973',
 u'scans': {u'AVG': {u'detected': True,
                     u'result': u'FakeAV.AFQQ',
                     u'update': u'20131029',
                     u'version': u'13.0.0.3169'},
            u'Agnitum': {u'detected': True,
                         u'result': u'FraudTool.Agent!dfdcHBsNM3c',
                         u'update': u'20131029',
                         u'version': u'5.5.1.3'},
            u'AhnLab-V3': {u'detected': True,
                           u'result': u'Trojan/Win32.FakeAV',
                           u'update': u'20131029',
                           u'version': u'2013.10.30.01'},
            u'AntiVir': {u'detected': True,
                         u'result': u'TR/Winwebsec.bamnx',
                         u'update': u'20131030',
                         u'version': u'7.11.110.26'},
            u'Antiy-AVL': {u'detected': False,
                           u'result': None,
                           u'update': u'20131029',
                           u'version': u'2.0.3.7'},

1 个答案:

答案 0 :(得分:1)

您没有JSON数据。你有Python文字(定义字典,布尔值,字符串和None对象的Python语法,就像你在Python源代码中找到它们一样)。

JSON数据不对字符串使用单引号,也不以u为前缀,但Python 2 unicode对象。 JSON使用null,其中Python使用Nonefalsetrue,其中Python使用FalseTrue

修复创建文件的过程(它看起来像pprint模块将产生的输出)以实际生成JSON,或者使用ast.literal_eval() function将字符串安全地转换回Python对象。

如果您使用的是the scripts from this repository,请知道--jsondump开关会产生JSON输出。脚本将API从API加载到Python结构中,并且交换机仅将该结构转储到文件作为Python文字

if jsondump == True:
  jsondumpfile = open("VTDL" + md5 + ".json", "w")
  pprint(it, jsondumpfile)
  jsondumpfile.close()
  print "\n\tJSON Written to File -- " + "VTDL" + md5 + ".json"

请注意那里的pprint()电话。如果您需要将JSON加载到您自己的Python代码中,请编写自己的API调用,而不是依赖此脚本。