json.dumps vs flask.jsonify

hlasů
174

Nejsem si jistý, chápu účel flask.jsonifymetody. Snažím se vytvořit řetězec JSON z toho:

data = {id: str(album.id), title: album.title}

ale to, co jsem si s json.dumpsliší od toho, co jsem si s flask.jsonify.

json.dumps(data): [{id: 4ea856fd6506ae0db42702dd, title: Business}]
flask.jsonify(data): {id:…, title:…}

Je zřejmé, musím se dostat výsledek, který vypadá spíš jako to, co json.dumpsse vrátí. Co dělám špatně?

Položena 26/10/2011 v 20:06
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
80

Můžete dělat:

flask.jsonify(**data)

nebo

flask.jsonify(id=str(album.id), title=album.title)
Odpovězeno 26/10/2011 v 20:13
zdroj uživatelem

hlasů
224

jsonify()Funkce v baňce vrátí flask.Response()objekt, který již má odpovídající typ obsahu záhlaví ‚application / JSON‘ pro použití s odpovědí JSON. Zatímco se json.dumps()metoda právě vrací kódovaný řetězec, který by vyžadoval ručním přidáním hlavičky typu MIME.

Viz další informace o jsonify()funkci zde na úplném odkazu.

Edit: Také jsem si všiml, že jsonify()se zabývá kwargs nebo slovníky, přičemž json.dumps()navíc podporuje seznamy a další.

Odpovězeno 01/11/2012 v 08:20
zdroj uživatelem

hlasů
54

Tohle je flask.jsonify()

def jsonify(*args, **kwargs):
    if __debug__:
        _assert_have_json()
    return current_app.response_class(json.dumps(dict(*args, **kwargs),
        indent=None if request.is_xhr else 2), mimetype='application/json')

jsonModul se používá buď simplejson, nebo jsonv tomto pořadí. current_appje odkaz na Flask()objekt, tj aplikace. response_class()je odkaz na Response()třídu.

Odpovězeno 14/04/2013 v 21:21
zdroj uživatelem

hlasů
22

Volba jednoho nebo druhého, závisí na tom, co máte v úmyslu udělat. Z toho, co chápu:

  • jsonify by bylo užitečné, když jste budování API někdo dotaz a očekával JSON na oplátku. Např: REST API GitHub mohla tuto metodu použít k odpovědět na váš požadavek.

  • skládky , je více o formátování data / python objektu do JSON a na něm budou pracovat uvnitř vaší žádosti. Například, musím předat objekt do svého zastoupení vrstvě, kde se některé javascript zobrazí graf. Budete krmit javascript s JSON vytvořeného skládek.

Odpovězeno 17/03/2014 v 21:38
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more