2014-09-17 5 views
0

Существует веб-сайт (http://xisbn.worldcat.org/xisbnadmin/doc/api.htm), который предлагает его API в нескольких форматах, включая XML, CSV, JSON и нечто, называемое «python». Я предполагаю, что это связано с языком программирования Python, но как? Результат выглядит следующим образом:Что такое «python» api?

{ 
'stat':'ok', 
'list':[{ 
    'url':['http://www.worldcat.org/oclc/177669176?referer=xid'], 
    'publisher':'O\'Reilly', 
    'form':['BA', 
    'DA'], 
    'lccn':['2004273129'], 
    'lang':'eng', 
    'city':'Sebastopol, CA', 
    'author':'by Mark Lutz and David Ascher.', 
    'ed':'2nd ed.', 
    'year':'2003', 
    'isbn':['0596002815'], 
    'title':'Learning Python', 
    'oclcnum':['177669176', 
    '222927677', 
    '249274099', 
    '253402825', 
    '301161087', 
    '438280230', 
    '442197411', 
    '464709193', 
    '492988633', 
    '54619668', 
    '55847258', 
    '614957020', 
    '644729085', 
    '760707144', 
    '772683553', 
    '802989466', 
    '850841661', 
    '851226517', 
    '875412584']}]} 

Это выглядит как JSON для меня, но вывод в формате JSON, в то время как аналогичные, это:

{ 
"stat":"ok", 
"list":[{ 
    "url":["http://www.worldcat.org/oclc/177669176?referer=xid"], 
    "publisher":"O'Reilly", 
    "form":["BA", 
    "DA"], 
    "lccn":["2004273129"], 
    "lang":"eng", 
    "city":"Sebastopol, CA", 
    "author":"by Mark Lutz and David Ascher.", 
    "ed":"2nd ed.", 
    "year":"2003", 
    "isbn":["0596002815"], 
    "title":"Learning Python", 
    "oclcnum":["177669176", 
    "222927677", 
    "249274099", 
    "253402825", 
    "301161087", 
    "438280230", 
    "442197411", 
    "464709193", 
    "492988633", 
    "54619668", 
    "55847258", 
    "614957020", 
    "644729085", 
    "760707144", 
    "772683553", 
    "802989466", 
    "850841661", 
    "851226517", 
    "875412584"]}]} 

пример «питон» не разобрать, как действительный JSON , так что это? Как можно декодировать эту информацию в Python?

ответ

3

Это буквальный Python; он использует синтаксис Python для всего. Синтаксис Python для словарей и списков и строк довольно близок к эквивалентному синтаксису JSON. Строки Python: байтовые строки Однако значения Unicode, как они, были бы в JSON.

Любые null значения JSON будет представлен в виде None в Python, и любые булевы будут визуализируется как True и False, а не JSON true и false.

Вы можете разобрать его с помощью ast.literal_eval() function, но это будет медленнее, чем разбор JSON. Никогда не пытайтесь использовать eval() по таким данным; все, что требуется, - это чтобы DNS-запись API была захвачена злоумышленником для подачи вами произвольных объектов Python и компрометации вашего процесса.

Честно говоря, предложение синтаксиса Python довольно бессмысленно, на мой взгляд. Они также предлагают варианты PHP и Ruby; все, что меняется, - это разделители вокруг типов. Это, в лучшем случае, любопытство; предположительно, разбор JSON будет быстрее и на других языках (поскольку синтаксический анализ Python, Ruby или PHP требует поддержки намного большего числа типов), или открытие этих процессов для eval() -типов.

+0

Я полагаю, что преимущество этого «кода на питоне» заключается в том, что вы можете использовать структуры данных, которые не рассматриваются в JSON, например, 'set'. На самом деле это не огромная выгода. – bgusach

+0

Итак, в чем смысл, если JSON быстрее? Должен ли я использовать это, или JSON? – felixphew

+2

@ ikaros45: Я сомневаюсь, что API будет предлагать любые такие структуры данных. Те же данные должны быть представлены в JSON, CSV, Ruby, PHP и HTML тоже. –