对于每个带有JSON对象python的循环

时间:2016-08-12 08:09:24

标签: python json

好吧,所以我在尝试解析我的JSON对象时遇到了一些麻烦。 我的目标是获取某个JSON密钥并返回它的值。

JSON文件

{
  "files": {
    "resources": [
      {
        "name": "filename",
        "hash": "0x001"
      },
      {
        "name": "filename2",
        "hash": "0x002"
      }
    ]
  }
}

我开发了一个允许我解析上面的JSON代码的函数

功能

def parsePatcher():
    url = '{0}/{1}'.format(downloadServer, patcherName)
    patch = urllib2.urlopen(url)
    data = json.loads(patch.read())
    patch.close()
    return data

好的,现在我想做一个foreach语句,打印出"resources": []对象中的每个名字和哈希值。

Foreach声明

for name, hash in patcher["files"]["resources"]:
    print name
    print hash

但它只打印出“name”和“hash”而不是“filename”和“0x001”

我在这里做错了吗?

4 个答案:

答案 0 :(得分:3)

使用name, hash作为for循环目标,您解压缩字典:

>>> d = {"name": "filename",  "hash": "0x001"}
>>> name, hash = d
>>> name
'name'
>>> hash
'hash'

这是因为字典上的迭代只产生键:

>>> list(d)
['name', 'hash']

并且解包使用迭代来生成要分配给目标名称的值。

根本就是随机事件,即使在Python 3.3和更新的默认情况下启用了哈希随机化,这两个键的顺序也可以相反。

只需使用一个名称将字典分配给该字典,并在该字典上使用订阅:

for resource in patcher["files"]["resources"]:
    print resource['name']
    print resource['hash']

答案 1 :(得分:0)

所以你打算做的是:

for dic in x["files"]["resources"]:
    print dic['name'],dic['hash']

您需要在该阵列资源中迭代这些词典。

答案 2 :(得分:-2)

问题似乎是你有一个字典列表,首先获取列表的每个元素,然后询问元素(字典)中的键名称和哈希值

编辑:这是经过测试和运作的

mydict = {"files": { "resources": [{  "name": "filename",  "hash": "0x001"},{  "name": "filename2",  "hash": "0x002"}]} }

for element in mydict["files"]["resources"]:
  for d in element:
    print d, element[d]

答案 3 :(得分:-2)

如果你有多个文件和多个资源。这种通用解决方案有效。

for keys in patcher:
     for indices in patcher[keys].keys():
             print(patcher[keys][indices])

检查myside的输出

for keys in patcher:
...     for indices in patcher[keys].keys():
...             print(patcher[keys][indices])
...
[{'hash': '0x001', 'name': 'filename'}, {'hash': '0x002', 'name': 'filename2'}]