使用Python从json检索数据
我试图从给定comp1和comp2作为python脚本输入的子元素中检索URL使用Python从json检索数据,python,json,python-2.7,Python,Json,Python 2.7,我试图从给定comp1和comp2作为python脚本输入的子元素中检索URL { "main1": { "comp1": { "url": [ "http://kcdclcm.com", "http://dacklsd.com" ] }, "comp2": { "url": [ "http://dccmsdlkm.com", "http://clsdmc
{
"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函数的片段,我正试图使用它获取URL
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部分作为输入传递给脚本。如果只知道第二个元素,有没有办法找到url信息
非常感谢您的任何输入。您需要迭代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')
您需要迭代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')
如果要在每个main中仅使用comp键搜索URL,只需按如下方式执行:
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')
如果要在每个main中仅使用comp键搜索URL,只需按如下方式执行:
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')