使用Python从json检索数据

使用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

我试图从给定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函数的片段,我正试图使用它获取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')