【问题标题】:Iterating over JSON object in python在python中迭代JSON对象
【发布时间】:2013-09-19 23:45:41
【问题描述】:

我将下面的JSON 代码存储在jso 变量中。

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
... 

我得到的输出:

输出获取

{'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'}}}

【问题讨论】:

    标签: python json python-2.7 dictionary iteration


    【解决方案1】:

    Dictionaries 在 python 中是无序集合:

    最好将字典视为一组无序的键:值 对,要求密钥是唯一的(在一个 字典)。

    但是,如果你已经从字符串加载了json,你可以直接加载到OrderedDict,见:

    【讨论】:

    • 同样重要的是要注意这个概念扩展到 JSON。 “对象是一组无序的名称/值对。”
    • 谢谢@alecxe!但是当我在 my_ordered_dict.iteritems() 中为 k,v 迭代 OrderDict 时,我无法使用 isinstance(v,(list))isinstance(v,(str)) 检查条目是否为列表/字符串: ... print k,v GlossDiv OrderedDict ([(u'title', u'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))
    • @VarunMalhotra 此要求不在您的问题中。编辑您的问题以解释您的需求。
    • @VarunMalhotra 请记住,您已经嵌套了有序的字典。 v in for k,v in my_ordered_dict.iteritems() 也是 OrderedDict
    猜你喜欢
    • 1970-01-01
    • 2013-02-26
    • 2012-12-14
    • 2019-05-12
    • 2015-09-06
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多