首页 > 解决方案 > 从列表中打印字典在每一行放置一个字符

问题描述

是的,还有一个。我无法弄清楚问题是什么。我正在尝试遍历一个列表,该列表是 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中的一个脚本,我用它来作为另一个脚本的基础。我基本上是边走边学。

标签: pythonjson

解决方案


display_all_results正在返回一个字符串,因为您正在执行json.dumps in json.dumps(results, indent=4, sort_keys=True),它将字典转换为字符串(您从函数r.json()中获取该字典)get_json

然后,您最终遍历该字符串的字符 in main,您会看到每行一个字符

相反,只需results从返回display_all_results,代码将按预期工作

def display_all_results(url):
    #results is already a dictionary, just return it
    results = get_results(url)
    if results:
        return results

推荐阅读