如何从JSON值列表中输出格式化的文本?

时间:2019-06-26 20:29:26

标签: python json python-3.x slack slack-api

我正在使用slackbot。我有一个json文件和python代码,它们根据用户的输入输出一些内容。有一个搜索命令可从json文件输出搜索结果。当前输出未格式化,因为当从json中获取值时,它们会附加到列表中,然后返回到主python程序。

我尝试创建一个循环,该循环将某种程度上解析搜索输出并将其缩减,以使每组值都是独立的,然后添加到可以格式化的列表中。我尝试过的循环并没有真正起作用,而且我不太确定如何正确制作可用于格式化输出的循环。我也尝试过使用format()格式化输出,但由于它是一个列表,因此不起作用。

这是当前搜索输出的示例。

if command.startswith(SEARCH):
        try:
            search = search_data(command.split(' ')[1])
            response = search
        except KeyError:
            response = 'This search key does not exist.'
        except TypeError:
            response = 'Wrong search input'

这是我从另一个python脚本导入的示例搜索命令:

def search_data(keyword):

result = []
for key, value in data.items():
    first = value['first']
    last = value['last']
    if keyword in first:
        result.append(value)
    elif keyword in last:
        result.append(value)
return result

这是一个示例JSON:

{
"1": {
  "id": "1",
  "first": "Joe",
  "last": "Adam"
},
"2": {
  "id": "2",
  "first": "Mary",
  "last": "Smith"
},
"3": {
    "id": "3",
    "first": "Ann",
    "last": "John"
}
}

我有另一个输出,我使用此行代码来格式化,并且我想以相同的方式格式化列表输出。

response = '*ID:* {}\n *First:* {}\n *Last:*
{}\n\n'.format(search['id'],search['first'],search['last'])

预期输出是供用户使用slackbot在slack中输入搜索内容。例如,用户可以输入“搜索J”,并且输出列出在“第一个”或“最后一个”值中具有J值的匹配值集。我当前的输出类似于:

[{"id":"1","first":"Joe","last":"Adam"}, 
{"id":"2","first":"Ann","last":"John"}]

但是我想将其格式化为:

ID: 1
First: Joe
Last: Adam

ID: 2
First: Ann
Last: John

1 个答案:

答案 0 :(得分:0)

这应该做

"\n\n".join([f"ID: {out['id']}\nFirst: {out['first']}\nLast: {out['last']}" for out in result])