2015-09-28 2 views
-1

Я пытаюсь разобрать этот ответ JSON:Невозможно разобрать все элементы JSON

[ 
   "http://torrent.ubuntu.com:6969/announce", 
   "udp://open.demonii.com:1337/announce", 
   "udp://torrent.ubuntu.com:6969/announce", 
   "udp://tracker.leechers-paradise.org:6969/announce", 
   "udp://tracker.openbittorrent.com:80/announce" 
] 

С:

for item in jdata: 
    torrent_tracker = item 
    print(torrent_tracker) 
magnet = "magnet:?xt=urn:btih:" + hash + "&tr=" + torrent_tracker 

Но это только кажется, чтобы получить каждую строку отдельно. Есть ли способ получить все результаты JSON в torrent_tracker var?

Действительный торрент-трекер для этого JSON может быть:

&tr=udp://torrent.ubuntu.com:6969/announce&tr=udp://tracker.leechers-paradise.org:6969/announce&tr=udp://tracker.openbittorrent.com:80/announce&tr=udp://tracker.coppersurfer.tk:6969/announce

+1

Что * в * 'jdata'? Как вы расшифровали JSON? –

+0

jdata его результат pastebin, я декодирован '' 'jdata = self.getURL (trackerUrl, json = True)' '' trackerURL является var – mati

+0

Это не похоже на стандартный API, с которым я знаком. Возможно, вы используете [SickRage] (https://github.com/SiCKRAGETV/SickRage)? Если это так, тогда это говорит мне, что означает флаг 'json = True' *; *; в этом случае он возвращает объект Python после декодирования тела ответа (SickRage использует 'запросы' под капотом, поэтому мы можем доверять ему, что это делает это правильно). –

ответ

0

Просто используйте += (в Python 3).

torrent_tracker = torrent_tracker + item работает для любого python.

Если вы хотите, чтобы список, выше вашего цикла for, положил torrent_tracker = [] и обернул элемент в [] (torrent_tracker = torrent_tracker + [item]). Для строки установите torrent_tracker = '' перед циклом for.

0

Нет необходимости в цикле for. Вы можете предварять все строки в списке с list comprehension:

["&tr=" + s for s in jdata] 

И тогда вы можете присоединиться к ним с string.join().

Так, например, это может работать для вас:

magnet = "magnet:?xt=urn:btih:" + hash + "".join(["&tr=" + s for s in jdata]) 

Хотя, если вы планируете на отправку их в качестве параметров GET вы, вероятно, хотите, чтобы URL кодировать их первым;)

0

Используйте join() метод без цикла:

torrent_tracker = '&tr=' + '&tr='.join(jdata) 
magnet = "magnet:?xt=urn:btih:" + hash + torrent_tracker 
Смежные вопросы