Flask - 正确使用jsonify

时间:2017-02-17 03:19:31

标签: python json flask

即使我查看了文档,我也很难理解jsonify的工作原理。正如您在下面看到的,我正在调用返回字典的lookup()函数,然后我试图对其进行jsonify。

@app.route("/articles")
def articles():

    a = lookup(33496)
    return jsonify([link=a["link"], title = a["title"]])       #invalid syntax error

我的helpers.py

import feedparser
import urllib.parse

def lookup(geo):
    """Looks up articles for geo."""       #this function already parses the 'link' and 'title' form rss feed

    # check cache for geo
    if geo in lookup.cache:
        return lookup.cache[geo]

    # get feed from Google
    feed = feedparser.parse("http://news.google.com/news?geo={}&output=rss".format(urllib.parse.quote(geo, safe="")))

    # if no items in feed, get feed from Onion
    if not feed["items"]:
        feed = feedparser.parse("http://www.theonion.com/feeds/rss")

    # cache results
    lookup.cache[geo] = [{"link": item["link"], "title": item["title"]} for item in feed["items"]]

    # return results
    return lookup.cache[geo]

# initialize cache
lookup.cache = {}

我得到的错误是语法无效。对我做错了什么的想法?感谢

2 个答案:

答案 0 :(得分:1)

你不需要方括号,摆脱它们。

return jsonify(link=a["link"], title=a["title"])
             # ^At this point                 ^ and this one.

Read about keyword arguments in python.

答案 1 :(得分:1)

我认为您的dict语法错误。您可以在official documentation中了解更多信息。

我认为您正在尝试的代码如下:

@app.route("/articles")
def articles():
    a = lookup(33496)
    return jsonify({"link" : a["link"], "title" : a["title"]})

具体来说,您应该使用花括号而不是括号({})和冒号(:)而不是等号。

另一种选择是让jsonify()进行转换(如另一个答案中所指出的):

@app.route("/articles")
def articles():
    a = lookup(33496)
    return jsonify(link = a["link"], title = a["title"])

尽管如此,我认为建议您使用创建dict。当您需要创建更大的JSON对象时,它会变得更加灵活。

希望这有帮助。