Обработка SimpleJson с одинаковыми именами

Я использую API Alchemy в приложении, поэтому я использую библиотеку simplejson для анализа ответов. Проблема состоит в том, что ответы содержат записи, имеющие имя sme

{ "status": "OK", "usage": "By accessing AlchemyAPI or using information generated by AlchemyAPI, you are agreeing to be bound by the AlchemyAPI Terms of Use: http://www.alchemyapi.com/company/terms.html", "url": "", "language": "english", "entities": [ { "type": "Person", "relevance": "0.33", "count": "1", "text": "Michael Jordan", "disambiguated": { "name": "Michael Jordan", "subType": "Athlete", "subType": "AwardWinner", "subType": "BasketballPlayer", "subType": "HallOfFameInductee", "subType": "OlympicAthlete", "subType": "SportsLeagueAwardWinner", "subType": "FilmActor", "subType": "TVActor", "dbpedia": "http://dbpedia.org/resource/Michael_Jordan", "freebase": "http://rdf.freebase.com/ns/guid.9202a8c04000641f8000000000029161", "umbel": "http://umbel.org/umbel/ne/wikipedia/Michael_Jordan", "opencyc": "http://sw.opencyc.org/concept/Mx4rvViVq5wpEbGdrcN5Y29ycA", "yago": "http://mpii.de/yago/resource/Michael_Jordan" } } ] } 

Таким образом, проблема заключается в том, что «subType» повторяется, поэтому dict, что возвращает нагрузки, является просто «TVActor», а не списком. Нужно ли вообще обойти это?

  • Самый простой способ сериализации простого объекта класса с simplejson?
  • Проверьте, существует ли JSON (свойство объекта) и печатается в виде декодирования в формате Unicode
  • Декодирование json и Iterate через элементы в шаблоне django
  • В чем разница между модулями json и simplejson Python?
  • Кодирование Python JSON
  • Получение значений из JSON с использованием Python
  • Почему json-сериализация объектов datetime в python не работает из коробки для объектов datetime
  • Невозможно разобрать простой json с помощью python
  • One Solution collect form web for “Обработка SimpleJson с одинаковыми именами”

    Rfc 4627, который определяет application/json говорит:

     An object is an unordered collection of zero or more name/value pairs 

    А также:

     The names within an object SHOULD be unique. 

    Это означает, что AlchemyAPI не должен возвращать несколько "subType" внутри одного и того же объекта и утверждать, что это JSON.

    Вы можете попробовать запросить то же самое в формате XML ( outputMode=xml ), чтобы избежать неоднозначности результатов или для преобразования значений повторяющихся ключей в списки:

     import simplejson as json from collections import defaultdict def multidict(ordered_pairs): """Convert duplicate keys values to lists.""" # read all values into lists d = defaultdict(list) for k, v in ordered_pairs: d[k].append(v) # unpack lists that have only 1 item for k, v in d.items(): if len(v) == 1: d[k] = v[0] return dict(d) print json.JSONDecoder(object_pairs_hook=multidict).decode(text) 

    пример

     text = """{ "type": "Person", "subType": "Athlete", "subType": "AwardWinner" }""" 

    Вывод

     {u'subType': [u'Athlete', u'AwardWinner'], u'type': u'Person'} 
    Python - лучший язык программирования в мире.