从列表内部打印字典会在每行上放置一个字符

时间:2019-06-19 20:53:50

标签: python json

是的,另一个。我不知道是什么问题。我正在尝试遍历一个列表,该列表是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中的脚本,该脚本是基于另一个脚本的。我基本上是在学习。

2 个答案:

答案 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)