2011-10-10 14 views
8

Estoy tratando de obtener un objeto JSON como:JSON para modelar una clase utilizando Django

{ 
    "username": "clelio", 
    "name": "Clelio de Paula", 
} 

y transformarla en:

class User(models.Model): 

    name = models.CharField(max_length=30) 
    username = models.CharField(max_length=20) 

    def jsonToClass(s): 

     aux = json.dumps(s, self) 

     self.name = aux['name'] 
     self.id = aux['id'] 

Así que traté de usar el método simplejson y uno llamada jsonToClass():

>>> import simplejson as json 
    >>> u1 = User() 
    >>> u1.jsonToClass(face) 
    >>> u1.save() 

Esto no funciona. ¿Cuál es el método más fácil de hacer lo que quiero?

Respuesta

10

Es probable que desee ver (de)serialization framework de Django. Dada JSON como:

[ 
    { 
    "model": "myapp.user", 
    "pk": "89900", 
    "fields": { 
     "name": "Clelio de Paula" 
    } 
    } 
] 

puede guardarlo como esto:

from django.core import serializers 
for deserialized_object in serializers.deserialize("json", data): 
    deserialized_object.save() 

en cuenta que yo creo que hay que usar el formato de serialización de Django utilizar este método, por lo que es posible que tenga que ajustar su JSON en consecuencia.

+0

Bueno, podría usar el módulo 'json' para envolver la respuesta en la matriz externa y el objeto requerido por el módulo de serialización. Pero eso podría ser excesivo. – nrabinowitz

+0

Gracias @nrabinowitz, voy a leer el marco de deserialización, pero necesito obtener estos objetos json por solicitud HTTP, y no tengo un estándar porque a veces obtengo datos usando graph.facebook.com y otra API de youtube – cleliodpaula

+1

También debo señalar que en su código original, json.dumps() debería ser json.loads (s): probablemente sea por eso que el código original no funcionó. – nrabinowitz

4

me di cuenta de que

{ 
    "username": "clelio", 
    "name": "Clelio de Paula", 
} 

es un objeto dict().

Por lo tanto, esto es más fácil de lo que pensaba.

Lo que necesito para resolver es sólo

def jsonToClass(self, aux): 

    self.name = aux['name'] 
    self.username = aux['username'] 

eso es todo.

+0

algo peligroso pero tal vez bien (a veces) probablemente debería hacer algunas comprobaciones y otras cosas 'self .__ dict __. Update (aux)' – user25064

+0

¿Cómo es esto peligroso? ¿Es porque podría obtener claves duplicadas (y anular valores distintos) si los datos no están marcados? – Kreychek

+0

Porque puede tener campos en su modelo que sean propiedades de Python y resguardados por instaladores complejos. De lo contrario, no hay ningún tipo de verificación o validación, pero si confías en tus datos, eso podría funcionar – jsbueno

Cuestiones relacionadas