使用Python从json检索数据

2024-07-05 15:04:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从给定comp1和comp2的子元素中检索url作为python脚本的输入

{
  "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

^{pr2}$

我完全理解错误在脚本的第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信息

如有任何意见,我们将不胜感激。在


Tags: in脚本com信息httpurl元素data
2条回答

您需要迭代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')

相关问题 更多 >