2013-07-10 3 views
1

Я работаю с Mega API и Python в надежде создать дерево папок, читаемое Python. На данный момент я работаю с ответами JSON, предоставленными API Mega, но по какой-то причине у меня возникают проблемы с его синтаксическим анализом. Раньше я просто использовал simplejson в следующем формате, хотя сейчас он не работает. На данный момент я просто пытаюсь получить имя файла. Любая помощь приветствуется!Python - SimpleJSON Issue

import simplejson  

megaResponseToFileSearch = "(u'BMExefXbYa', {u'a': {u'n': u'A Bullet For Pretty Boy - 1 - Dial M For Murder.mp3'}, u'h': u'BMExXbYa', u'k': (5710166, 21957970, 11015946, 7749654L), u'ts': 13736999, 'iv': (7949460, 15946811, 0, 0), u'p': u'4FlnwBTb', u's': 5236864, 'meta_mac': (529642, 2979591L), u'u': u'xpz_tb-YDUg', u't': 0, 'key': (223xx15874, 642xx8505, 1571620, 26489769L, 799460, 1596811, 559642, 279591L)})" 

jsonRespone = simplejson.loads(megaResponseToFileSearch) 

print jsonRespone[u'a'][u'n'] 

ОШИБКА:

Traceback (most recent call last): 
    File "D:/Projects/Mega Sync/megasync.py", line 18, in <module> 
    jsonRespone = simplejson.loads(file4) 
    File "D:\Projects\Mega Sync\simplejson\__init__.py", line 453, in loads 
    return _default_decoder.decode(s) 
    File "D:\Projects\Mega Sync\simplejson\decoder.py", line 429, in decode 
    obj, end = self.raw_decode(s) 
    File "D:\Projects\Mega Sync\simplejson\decoder.py", line 451, in raw_decode 
    raise JSONDecodeError("No JSON object could be decoded", s, idx) 
simplejson.decoder.JSONDecodeError: No JSON object could be decoded: line 1 column 0 (char 0) 

EDIT:

меня спросили, где я получил строку из. Это ответ на поиск файла с помощью Mega API. Я использую модуль, найденный здесь. https://github.com/richardasaurus/mega.py Сам код выглядит следующим образом:

from mega import Mega 
mega = Mega({'verbose': True}) 
m = mega.login(email, password) 
file = m.find('A Bullet For Pretty Boy - 1 - Dial M For Murder.mp3') 
print file 
+0

Это не похоже на действительную строку json. Где вы его получили (отправьте код, если это возможно)? – alecxe

+0

Обновленный вопрос с кодом. Слишком быстро я понял, что это был JSON, который выплевывал? – Dustin

ответ

1

Вещь, которую Вы получаете от m.find только питон кортеж, где 1-й (следующий после 0-го) элемента словаря:

(u'99M1Tazb', 
{u'a': {u'n': u'test.txt'}, 
    u'h': u'99M1Tazb', 
    u'k': (1145485578, 1435138417, 702505527, 274874292), 
    u'ts': 1373482712, 
    'iv': (1883603069, 763415510, 0, 0), 
    u'p': u'9td12YaY', 
    u's': 0, 
    'meta_mac': (1091379956, 402442960), 
    u'u': u'79_166PAQCA', 
    u't': 0, 
    'key': (872626551, 2013967015, 1758609603, 127858020, 1883603069, 763415510, 1091379956, 402442960)}) 

чтобы получить имя файла, просто используйте:

print file[1]['a']['n'] 

Таким образом, нет необходимости использовать simplejson вообще.

+0

AH! Вот почему я перепутался. Большое спасибо! – Dustin

Смежные вопросы