在嵌套json中按值提取第一个键

2024-05-15 12:17:00 发布

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

我有一个json格式,我必须从中提取关键:非常重视它第一次出现在文件中。浏览了几个例子,但出现了一个错误。你知道吗

{
     "search-results": {
     "entry": [
        {
            "@_fa": "true",
            "eid": "10-s2.0-60103485",
            "prism:url": 
"https://api.elsevier.com/content/affiliation/affiliation_id/60103485"
        },
        {
            "@_fa": "true",
            "eid": "10-s2.0-113310784",
            "prism:url": 
"https://api.elsevier.com/content/affiliation/affiliation_id/113310784"
        },

我试过:

myvar = results['search-results'][0]['entry']['eid']
print (myvar)

TypeError: string indices must be integers


results = json.dumps(resp.json(),
             sort_keys=True,
             indent=4, separators=(',', ': '))


print(results)
myvar = results['search-results'][0]['entry']['eid']
print (myvar)  

我需要在它第一次出现时提取"eid": "10-s2.0-60103485"。你知道吗


Tags: httpsapijsontrueurlsearchresultsfa
3条回答

您只需要翻转['entry'][0]的位置。你知道吗

myvar = results['search-results']['entry'][0]['eid']
print (myvar)

你的问题不太清楚这一点,但如果:

results = json.dumps(resp.json(),
             sort_keys=True,
             indent=4, separators=(',', ': '))


print(results)
myvar = results['search-results'][0]['entry']['eid']
print (myvar)  

是引起TypeError的代码,那么,很明显,这就是我们所期望的。json.dumps(obj, ...)获取Python对象并将其序列化为json字符串,因此在代码中results是一个字符串(它包含json格式的内容这一事实完全不相关)。要将json字符串反序列化为Python(以便获得可以使用的Python对象),需要使用json.loads(somejsonstr)。你知道吗

现在实际上,resp.json()(我假设resp来自python-requests库)已经负责将其内容反序列化到Python,因此您没有更多的事情要做-当然,除了按照James\u F所提到的正确顺序获取dict键/列表索引:

resp = requests.get(someurl)
results = resp.json()
myvar = results['search-results']['entry'][0]['eid']
print(myvar)

尝试使用jsonpath_ng.ext公司是的

from jsonpath_ng.ext import parse

f = parse("$..entry[?(@.eid=='10-s2.0-60103485')]").find(data)
print(f[0].value)

输出{'@_fa': 'true', 'eid': '10-s2.0-60103485', 'prism:url': 'https://api.elsevier.com/content/affiliation/affiliation_id/60103485'}

相关问题 更多 >