我有一个json格式,我必须从中首次提取key:value。通过了几个示例,但出错了。
{
"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"
首次出现时提取它。
答案 0 :(得分:2)
您只需要翻转BOOT-INF/classes/oauth_configuration.properties
和['entry']
的位置即可。
[0]
答案 1 :(得分:1)
关于这一点,您的问题不是很清楚,但是如果这样:
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,因此您无需再进行其他操作了。可以-当然,除了以正确的顺序获取dict键/列表索引外,正如James_F所述:
resp = requests.get(someurl)
results = resp.json()
myvar = results['search-results']['entry'][0]['eid']
print(myvar)
答案 2 :(得分:0)
尝试使用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'}