我正在尝试从给定comp1和comp2作为python脚本输入的子元素中检索url
{
"main1": {
"comp1": {
"url": [
"http://kcdclcm.com",
"http://dacklsd.com"
]
},
"comp2": {
"url": [
"http://dccmsdlkm.com",
"http://clsdmcsm.com"
]
}
},
"main2": {
"comp3": {
"url": [
"http://csdc.com",
"http://uihjkn.com"
]
},
"comp4": {
"url": [
"http://jkll.com",
"http://ackjn.com"
]
}
}
}
以下是python函数的片段,我试图用来抓取网址
import json
data = json.load(open('test.json'))
def geturl(comp):
if comp in data[comp]:
for url in data[comp]['url']:
print url
geturl('comp1')
geturl('comp2')
我完全理解错误是在脚本的第4行和第5行,因为我试图从json数据的第二个元素中获取url信息而不传递第一个元素'main1'或'main2'。如果我替换第4行和第5行,相同的脚本工作正常:
if comp in data['main1']:
for url in data['main1'][comp]['url']:
在我的情况下,我不会知道main1和main2,因为用户只需将comp1,comp2,comp3和comp4部分作为脚本的输入。有没有办法找到只有第二个元素已知的网址信息
任何意见都将受到高度赞赏。
答案 0 :(得分:1)
您需要遍历dict中的键/值以检查您要搜索的第二级键是否存在:
import json
data = json.load(open('test.json'))
def geturl(comp):
for k, v in data.items():
if comp in v and 'url' in v[comp]:
print "%s" % "\n".join(v[comp]['url'])
geturl('comp1')
geturl('comp2')
答案 1 :(得分:1)
如果你想在每个主要内容中仅使用comp键搜索网址,你只需要这样做:
import json
data = json.load(open('test.json'))
def geturl(comp):
for mainKey in data:
main = data[mainKey]
if comp in main:
urls = main[comp]['url']
for url in urls:
print url
geturl('comp1')
geturl('comp2')