2013-09-15 3 views
1

У меня есть код JSON, который хранится в переменной jso.Итерация над объектом JSON в python

jso = { 
     "GlossDiv": { 
      "title": "S", 
      "GlossList": { 
       "GlossEntry": { 
        "Abbrev": "ISO 8879:1986", 
        "GlossDef": { 
         "GlossSeeAlso": ["GML", "XML"] 
        }, 
        "GlossSee": "markup" 
       } 
      } 
     } 
    } 

Всякий раз, когда я пытаюсь извлечь данные или перебрать JSON Object, он печатает данные в обратном порядке т.е. object, а затем других параметров.

Для примера. Я исполняю:

>>> for k,v in jso.iteritems(): 
...  print v 
... 

И ВЫХОДНОЙ I GOT:

ВЫХОД ПОЛУЧЕНИЕ

{'GlossList': {'GlossEntry': {'Abbrev': 'ISO 8879:1986', 'GlossDef': {'GlossSeeAlso': ['GML', 'XML']}, 'GlossSee': 'markup'}}, 'title': 'S'} 

Можно видеть, что хотя 'title':'S' была написана до 'GlossList' Object еще данные печати в обратный порядок. Я имею в виду он должен иметь:

ВЫВОД ОЖИДАЕМЫЕ

{ 'title': 'S', 'GlossList': {'GlossEntry': {'Abbrev': 'ISO 8879:1986', 'GlossDef': {'GlossSeeAlso': ['GML', 'XML']}, 'GlossSee': 'markup'}}} 

ответ

4

Dictionaries в питона неупорядоченные коллекции:

Лучше думать о словаре как неупорядоченный набор ключ: значение , с требованием, чтобы ключи были уникальными (в пределах одного словаря ).

Но, если вы загрузили JSON из строки, вы можете загрузить его непосредственно на OrderedDict, см:

+2

Важно также отметить, что эта концепция распространяется к JSON. «Объект - это неупорядоченный набор пар имя/значение». –

+0

Спасибо @alecxe! Но я не могу использовать 'isinstance (v, (list))' или 'isinstance (v, (str))' для проверки записи, являющейся списком/строкой, когда я выполняю итерацию по OrderDict для k, v в my_ordered_dict.iteritems(): ... печать к, v GlossDiv OrderedDict ([(u'title 'и'S '), (u'GlossList', OrderedDict ([(u'GlossEntry', OrderedDict ([ (u'Abbrev ', u'ISO 8879: 1986'), (u'GlossDef ', OrderedDict ([(u'GlossSeeAlso', [u'GML ', u'XML'])])), (u'GlossSee ', u'markup')]))]))]) >>> isinstance (v, (list)) #isinstance (v, (str)) – softvar

+0

@VarunMalhotra Это требование не в вашем вопросе. Измените свой вопрос, чтобы объяснить, что вам нужно. –

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