【问题标题】:Flask - Using jsonify properlyFlask - 正确使用 jsonify
【发布时间】:2017-02-17 03:19:31
【问题描述】:

尽管我浏览了文档,但在理解 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 = {}

我得到的错误是无效的语法。知道我做错了什么吗?谢谢

【问题讨论】:

    标签: python json flask


    【解决方案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 对象时,它会变得更加灵活。

    希望这会有所帮助。

    【讨论】:

    • 如果需要显式转换为json,那么jsonify的目的是什么?
    • 是的@Jari,问题是我已经按照您使用jsonify() 指出的方式对其进行了编辑,但我遇到了一些语法错误。
    • 我现在尝试使用您的第一个示例,但我也遇到了错误。嗯
    • 另外,jsonify() 的要点是有一个标准的方法来将不同的内容(无论是字典、数组还是参数)转换为 Flask 可以通过 HTTP 返回的 JSON 格式。
    • 实际上它现在正在工作,我有一些拼写错误。谢谢
    【解决方案2】:

    你不需要方括号,去掉它们。

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

    Read about keyword arguments in python.

    【讨论】:

    • 我摆脱了它,但我得到了同样的无效语法错误
    • 我会检查链接,也许这就是我的错误所在。
    猜你喜欢
    • 2016-04-06
    • 2014-01-26
    • 2012-12-09
    • 2014-02-20
    • 2018-03-01
    • 2019-04-15
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多