好吧,所以我在尝试解析我的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”
我在这里做错了吗?
答案 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'}]