2015-07-30 3 views
-1

Привет У меня есть файл json и вы хотите его разобрать. Я написал код происходит некорректно:parse json file ValueError

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

У вас нет JSON. У вас есть литералы Питона. –

+0

http://jsonlint.com – deceze

+0

Что вы подразумеваете под этим? мой файл имеет расширение json .. – Alex

ответ

1

У вас нет данных в формате JSON. У вас есть литералы Python (синтаксис Python, определяющий словари, булевы, строки и объекты None так же, как вы найдете их в исходном коде Python).

JSON данные не использовать одинарные кавычки для строк и они не начинаются с префикса u, но Python 2 unicode объекты являются. JSON использует null, где Python использует None, false и true, где Python использует False и True.

Либо исправить процесс, который создает файл (это похоже на вывод, который будет производить модуль pprint), чтобы фактически создать JSON, либо использовать ast.literal_eval() function, чтобы безопасно преобразовать строку обратно в объекты Python.

Если вы используете the scripts from this repository, знайте, что переключатель --jsondump делает не производят вывод в формате JSON. Сценарии загрузка JSON из 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, а не полагайтесь на этот скрипт.