下面是我正在使用的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使用各种访问器,有时是'file',有时是'dll‘等等,所以我不能使用一个特定的字典键。我怎么才能使用多重。会有一种模块化的方法来做到这一点吗?
编辑:有很多访问器,“file”、“application”和“dll”只是一些例子。
发布于 2019-01-26 20:14:07
只要找到一个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']发布于 2019-01-26 20:10:28
尝尝这个
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',都可以使用它进行下载。
发布于 2019-01-26 20:15:12
这应该是可行的:
for library in my_json['libraries']:
for value in library.values():
for url in value.values():
file.download(url)https://stackoverflow.com/questions/54382206
复制相似问题