2017-02-17 3 views
0

Ich habe einige Schwierigkeiten zu verstehen, wie jsonify funktioniert, obwohl ich die Dokumentation durchging. Wie Sie unten sehen können, rufe ich die lookup() Funktion auf, die ein Wörterbuch zurückgibt, dann versuche ich es zu jsonifizieren.Flask - Mit jsonify richtig

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

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

mein 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 = {} 

Der Fehler, den ich habe, ist der ungültigen Syntax bekommen. Irgendeine Idee in was ich falsch mache? Danke

Antwort

1

Ich denke, Ihre dict Syntax falsch ist. Sie können über mehr in official documentation lesen.

Der Code, den ich glaube, Sie versuchen, für sich wie folgt:

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

Insbesondere sollten Sie geschweiften Klammern statt Klammern verwenden ({}) und Colon (:) statt Gleichheitszeichen.

Eine weitere Option ist jsonify() zu lassen um die Konvertierung zu tun (wie in der anderen Antwort darauf hingewiesen):

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

Trotzdem denke ich, Sie würden auch ein dict erstellen geraten werden, zu verwenden. Es wird flexibler, wenn Sie größere JSON-Objekte erstellen müssen.

Hoffe, das hilft.

+0

was ist der Zweck von jsonify dann, wenn Sie explizit die Konvertierung zu Json tun müssen? – tadm123

+0

Yea @Jari, das Problem ist, dass ich es bereits so bearbeitet habe, wie Sie mit 'jsonify()' darauf hingewiesen haben, aber ich bekomme einige Syntaxfehler. – tadm123

+0

Ich habe jetzt versucht, mit Ihrem ersten Beispiel, und ich bekomme die Fehler auch. Hmm – tadm123

1

Sie brauchen nicht die eckigen Klammern, loswerden sie.

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

Read about keyword arguments in python.

+0

Ich habe es los, aber ich bekomme den gleichen ungültigen Syntaxfehler – tadm123

+0

Ich werde über den Link gehen, vielleicht ist das, wo ich falsch liege. – tadm123