2017-02-17 5 views
0

У меня возникли проблемы с пониманием того, как работает jsonify, хотя я просмотрел документацию. Как вы можете видеть ниже, я вызываю функцию lookup(), которая возвращает словарь, а затем я пытаюсь его jsonify.Flask - правильно использовать 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 = {} 

ошибка, что я получаю от неправильного синтаксиса. Любая идея в том, что я делаю неправильно? Спасибо

ответ

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.

Надеюсь, это поможет.

+0

Какова цель jsonify тогда, если вам нужно явно сделать преобразование в json? – tadm123

+0

Yea @Jari, проблема в том, что я уже отредактировал его так, как вы указали с помощью 'jsonify()', но я получаю некоторые синтаксические ошибки. – tadm123

+0

Теперь я попытался использовать ваш первый пример, и я тоже получаю ошибки. Hmm – tadm123

1

Вам не нужны квадратные скобки, избавиться от них.

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

Read about keyword arguments in python.

+0

Я избавился от него, но я получаю ту же ошибку недопустимого синтаксиса – tadm123

+0

Я перейду по ссылке, возможно, именно там я ошибаюсь. – tadm123

Смежные вопросы