2011-10-10 18 views
8

का उपयोग कर एक वर्ग मॉडल करने के लिएJSON मैं की तरह एक JSON ऑब्जेक्ट प्राप्त करने के लिए कोशिश कर रहा हूँ Django

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'] 

तो मैं simplejson और एक विधि का उपयोग करने की कोशिश की jsonToClass() कहा जाता है:

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

यह काम नहीं करता है। मैं जो चाहता हूं उसे करने का सबसे आसान तरीका क्या है?

उत्तर

10

शायद आप Django के (de)serialization framework पर देखना चाहते हैं। जैसे JSON को देखते हुए:

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

आप इसे इस प्रकार बचा सकते हैं:

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

नोट मुझे विश्वास है कि आप, इस विधि का उपयोग करने के लिए Django क्रमबद्धता स्वरूप का उपयोग करना है ताकि आप अपने JSON समायोजित करने के लिए हो सकता है है तदनुसार।

+0

ठीक है, आप बाह्य सरणी में प्रतिक्रिया को लपेटने के लिए 'json' मॉड्यूल का उपयोग कर सकते हैं और क्रमबद्धता मॉड्यूल द्वारा आवश्यक ऑब्जेक्ट। लेकिन यह अधिक हो सकता है। – nrabinowitz

+0

धन्यवाद @ nrabinowitz, मैं deserialization ढांचे को पढ़ने जा रहा हूँ, लेकिन मुझे http अनुरोध द्वारा यह जेसन ऑब्जेक्ट्स प्राप्त करने की आवश्यकता है, और मानक नहीं है क्योंकि कभी-कभी मुझे graph.facebook.com का उपयोग करके डेटा मिल रहा है और एक और यूट्यूब एपीआई। – cleliodpaula

+1

मुझे यह भी इंगित करना चाहिए कि आपके मूल कोड में, json.dumps() json.loads होना चाहिए - शायद यही कारण है कि मूल कोड काम नहीं करता है। – nrabinowitz

4

मैं सिर्फ महसूस किया कि

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

एक dict() वस्तु है।

तो, यह मैंने सोचा जितना आसान है।

क्या मैं हल करने के लिए की जरूरत है सिर्फ

def jsonToClass(self, aux): 

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

यह है कि है।

+0

कुछ हद तक खतरनाक है लेकिन शायद ठीक है (कभी-कभी) शायद कुछ चेक करना चाहिए और क्या नहीं होना चाहिए .__ dict dict __। अद्यतन (aux) ' – user25064

+0

यह खतरनाक कैसे है? ऐसा इसलिए है क्योंकि डेटा की जांच नहीं होने पर इसे डुप्लिकेट कुंजी मिल सकती है (और अलग-अलग मान ओवरराइड हो सकती है)? – Kreychek

+0

क्योंकि आपके पास आपके मॉडल पर फ़ील्ड हो सकते हैं जो पाइथन गुण हैं, और जटिल सेटर्स द्वारा संरक्षित हैं। अन्यथा, कोई टाइप-चेकिंग या सत्यापन बिल्कुल नहीं है - लेकिन यदि आप अपने डेटा पर भरोसा करते हैं, तो यह काम कर सकता है – jsbueno

संबंधित मुद्दे