IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

Serialization JSON partielle


Sujet :

Django Python

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2003
    Messages : 8
    Par défaut Serialization JSON partielle
    Bonjour,
    Je suis nouveau dans le monde du Python + Django et j'aurai une petite question (pour le moins un peu bête mais bon...) concernant les QuerySet, Dictionnaire, SimpleJSON (ou le serializeur JSON de Django)

    Voila je récupère un objet de ma table "Utilisateurs" qui contient ces informations la:

    Nom
    Prenom
    Password
    email

    J'ai biensur un objet "Utilisateurs" dans un model

    Lorsque je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    data = Utilisateurs.objects.all()
    json = serialize('json', data)
    return HttpResponse(json, mimetype='application/javascript')
    je reçois un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    [
        {
            "pk": 1,
            "model": "Utilisateurs.Utilisateurs",
            "fields": {
                "Nom": "Dupond",
                "Prenom": "Jean",
                "Password": "6543T",
                "email": "jean.dupond@exemple.com",
     
            }
        }
    ]
    Bon, tout cela est bien joli, mais le résultat que je souhaiterai serait plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    [
        {
           "Nom": "Dupond",
           "Prenom": "Jean",
           "email": "jean.dupond@exemple.com",
        }
    ]
    Voila, alors soit je devrai directement agir sur l'objet "data" (qui je crois, est un dictionnaire ?) soit je serialize à la main (c'est ce que je fais en ce moment, et ce n'est pas du tout marrant)

    Un petit coup de main serait le bienvenu !

  2. #2
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    Salut,

    Tu peux transformer ton queryset en liste de dictionnaires, en utilisant la méthode values, essaie ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #data = Utilisateurs.objects.all()
    data = Utilisateurs.objects.values('Nom', 'Prenom', 'email')
    json = serialize('json', data)
    return HttpResponse(json, mimetype='application/javascript')

  3. #3
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2003
    Messages : 8
    Par défaut
    Merci pacificator c'est exactement ce qu'il me fallait !!!

    ... Parcontre je rencontre un problème avec la serialization des objets datetime (j'ai l'erreur "datetime.date(1975, 3, 14) is not JSON serializable")

    C'est apparement un problème connu mais résolu depuis 2006 (http://code.djangoproject.com/ticket/2460)

    J'ai trouvé quelques snippets pour contourner tout ça dont celui-ci "http://www.djangosnippets.org/snippets/1435/" mais j'avoue que je ne sais pas trop comment l'utiliser... que dois-je faire passer à la place du "o" ?

  4. #4
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    Parcontre je rencontre un problème avec la serialization des objets datetime (j'ai l'erreur "datetime.date(1975, 3, 14) is not JSON serializable")
    Ces objets ne sont pas des models et tu ne les serialises pas avec serializers.serialize, c'est ça?
    Peux-tu poster un exemple qui pose problème?

  5. #5
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2003
    Messages : 8
    Par défaut
    J'ai resolu le probème, c'était effectivement un bug du serializeur simplejson qui ne gerait pas correctement les objets de type datetime,
    la solution à été d'utiliser la class DateTimeAwareJSONEncoder

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    from django.core.serializers.json import DateTimeAwareJSONEncoder
    
    def mafonction:
       obj = MonObjet.objects.all()
       data = list(obj.values('Firstname', 'Lastname', 'Birthdate', 'Gender'))     
       json = simplejson.dumps(data, indent=3,cls=DateTimeAwareJSONEncoder)
       response =  HttpResponse(json, mimetype=MIME_TYPE)
    return response

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/03/2011, 10h56
  2. Réponses: 3
    Dernier message: 20/07/2007, 11h50
  3. Possibilite de replication partielle ?
    Par Mupps dans le forum Requêtes
    Réponses: 5
    Dernier message: 19/03/2004, 15h54
  4. faire un update partiel
    Par danseur dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 19/01/2004, 18h27
  5. Problème de serialization
    Par bruno270579 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 30/04/2003, 18h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo