2015-06-21 1 views
1

У меня есть возвращаемый объект JSON, которому мне нужно значение из номера поля 'id' для каждого возврата строки.Python 3 iterate json return object

переменной

выхода (JSON возврат объект):

[{'public_key': '21A8CAEEDC0B5A0A88657C796089D9CF83BC057B', 'flags': 256, 'algorithm': 8, 'digest': 'C0B0483159C3C2B0616BC27AC12D251BF30DFBF5E2B2A6D2DE964A3BAAC68564', 'id': 28105, 'digest_type': 2, 'keytag': 57881, 'date_created': <DateTime '20150620T01:49:46' at 805f34518>}, {'public_key': '406F0435E626AD582D4A403A9AB5E52F86CC3D15', 'flags': 256, 'algorithm': 8, 'digest': 'D06634258CCD3DD7BA8F7796828A6B4DFE142F01C964D851B9FAFE3D9CC7C712', 'id': 28141, 'digest_type': 2, 'keytag': 60608, 'date_created': <DateTime '20150621T01:44:55' at 805f34630>}] 

У меня есть библиотеки JSON загружены, но питон не нравится мое форматирование

ошибка:

Traceback (most recent call last): 
    File "makecustdomain.py", line 262, in <module> 
    json_object = json.load(output) 
    File "/usr/local/lib/python3.4/json/__init__.py", line 265, in load 
    return loads(fp.read(), 
AttributeError: 'list' object has no attribute 'read' 

код:

domain = 'domain2.com' 
    api = client.ServerProxy('https://rpc.gandi.net/xmlrpc/') 
    apikey = 'privateKey' 
    output = api.domain.dnssec.list(apikey, domain) 
    json_object = json.load(output) 
    for id in json_object[7]: 
      print(id) 

ожидается выход:

28105 
28141 

Как вернуть значение «ид» из моего JSON возврата объекта?

+0

Каков ваш ожидаемый результат? 'id' всех документов в массиве сыновей? – bagrat

+0

@ n9код каждой строки в объекте JSON является записью записи DNS-делегирования. Если всплывает «any», мне нужно удалить их все на основе номера идентификатора. поэтому мне нужны все номера идентификаторов в списке или другом итеративном формате, поэтому я могу удалить их сразу. , т.е. [45672, 56234 ...] -> api.domain.dnssec.delete (apikey, id) – NIX

+1

[ответ Джеймса Миллса] (http://stackoverflow.com/a/30960160/3264192) дает вам именно то, что вы хотеть. – bagrat

ответ

1

Я подозреваю output всегда будет list (, потому что вы используете RPC здесь и RPC обычно упорядочивает результаты в собственные типы) и поэтому вы должны сделать что-то вроде этого:

from pprint import pprint 
from operator import itemgetter 

output = api.domain.dnssec.list(apikey, domain) 
ids = map(itemgetter("id"), output) 
pprint(ids) 

Update: Если список идентификаторов вернуться в ["123 456", "789"] и вы хотите уплощенный список идентификаторов вы могли сделать что-то вроде:

ids = list(chain(*map(str.split, map(itemgetter("id"), output)))) 
+0

Он, конечно, печатает весь объект JSON, который я смог сделать раньше. Но все же не ближе к значению «id» http://paste.ee/p/TNEKW – NIX

+0

Тогда вам придется * уточнить * свой вопрос и показать нам, что означает '' output''. –

+0

«Выход» опубликован в оригинальном вопросе моего друга. Объект JSON есть. output = объект JSON. – NIX