是的,另一个。我不知道是什么问题。我正在尝试遍历一个列表,该列表是API调用的JSON输出的一部分。
这是我正在使用的JSON部分:
[
{
"created_at": "2017-02-22 17:20:29 UTC",
"description": "",
"id": 1,
"label": "FOO",
"name": "FOO",
"title": "FOO",
"updated_at": "2018-12-04 16:37:09 UTC"
}
]
我正在运行的代码将其检索并显示:
#!/usr/bin/python
import json
import sys
try:
import requests
except ImportError:
print "Please install the python-requests module."
sys.exit(-1)
SAT_API = 'https://satellite6.example.com/api/v2/'
USERNAME = "admin"
PASSWORD = "password"
SSL_VERIFY = False # Ignore SSL for now
def get_json(url):
# Performs a GET using the passed URL location
r = requests.get(url, auth=(USERNAME, PASSWORD), verify=SSL_VERIFY)
return r.json()
def get_results(url):
jsn = get_json(url)
if jsn.get('error'):
print "Error: " + jsn['error']['message']
else:
if jsn.get('results'):
return jsn['results']
elif 'results' not in jsn:
return jsn
else:
print "No results found"
return None
def display_all_results(url):
results = get_results(url)
if results:
return json.dumps(results, indent=4, sort_keys=True)
def main():
orgs = display_all_results(KATELLO_API + "organizations/")
for org in orgs:
print org
if __name__ == "__main__":
main()
我似乎缺少一个概念,因为当我打印org
时,我每行得到一个字符,例如
[
{
"
c
r
e
a
t
e
d
_
a
t
"
它会一直执行到最后的]
我还尝试打印org['name']
并抛出TypeError: list indices must be integers, not str Python
错误。这使我认为org
被看作是列表,而不是字典,我认为这是由于[{...}]
格式所致。
我想念什么概念?
编辑:为什么我不明白这一点的解释:我正在使用Red Hat Satellite API Guide中的脚本,该脚本是基于另一个脚本的。我基本上是在学习。
答案 0 :(得分:4)
display_all_results
返回一个字符串,因为您在json.dumps(results, indent=4, sort_keys=True)
中执行json.dumps,这会将字典转换为字符串(您正在从{{ 1}}函数)
然后您最终遍历r.json()
中该字符串的字符,并且每行看到一个字符
相反,只需从get_json
返回main
,代码将按预期工作
results
答案 1 :(得分:1)
组织是json.dump的结果,该结果产生一个字符串。因此,代替此代码:
for org in orgs:
print(org)
只需将其替换:
#for org in orgs:
print(orgs)