这是我正在使用的JSON的简化版本:
{
"libraries": [
{
"library-1": {
"file": {
"url": "foobar.com/.../library-1.bin"
}
}
},
{
"library-2": {
"application": {
"url": "barfoo.com/.../library-2.exe"
}
}
}
]
}
使用json,我可以json.loads()
这个文件。我需要能够找到“ url”,将其下载,然后将其保存到本地库中。在这种情况下,我将在libraries/
中创建两个文件夹,一个称为library-1
,另一个library-2
。在这些文件夹中将包含从url下载的内容。
但是,问题在于能够到达网址:
my_json = json.loads(...) # get the json
for library in my_json['libraries']:
file.download(library['file']['url']) # doesn't access ['application']['url']
由于我使用的JSON使用了多种访问器,有时是“文件”,有时是“ dll”等,因此我不能使用一个特定的字典键。如何使用多个。会有模块化的方式来做到这一点吗?
编辑:有许多访问器,“文件”,“应用程序”和“ dll”只是一些示例。
答案 0 :(得分:1)
尝试一下
for library in my_json['libraries']:
if 'file' in library:
file.download(library['file']['url'])
elif 'dll' in library:
file.download(library['dll']['url'])
它只是查看您的dict
(通过解析JSON创建)是否具有名为'file'
的密钥。如果是这样,则使用'url'
中的dict
对应于'file'
键。如果不是,请尝试使用'dll'
关键字。
编辑:如果您不知道访问包含URL的dict
的密钥,请尝试此操作。
for library in my_json['libraries']:
for key in library:
if 'url' in library['key']:
file.download(library[key]['url'])
这会遍历您的key
中的所有library
。然后,无论哪个key
包含一个'url'
,都使用该文件进行下载。
答案 1 :(得分:1)
只要找到URL,您就可以遍历字典的每个级别并下载文件。
urls = []
for library in my_json['libraries']:
for lib_name, lib_data in library.items():
for module_name, module_data in lib_data.items():
url = module_data.get('url')
if url is not None:
# create local directory with lib_name
# download files from url to local directory
urls.append(url)
# urls = ['foobar.com/.../library-1.bin', 'barfoo.com/.../library-2.exe']
答案 2 :(得分:1)
这应该有效:
for library in my_json['libraries']:
for value in library.values():
for url in value.values():
file.download(url)
答案 3 :(得分:1)
我建议这样做:
for library in my_json['libraries']:
library_data = library.popitem()[1].popitem()[1]
file.download(library_data['url'])