2017-07-04 2 views
0

Ich bin ziemlich neu zu Python, von js kommen.Wie kann ich Python-Objekte so strukturieren, dass sie gut JSonify sind?

Ich versuche, zwischen Client und Server mithilfe von Json zu kommunizieren, und ich habe Probleme zu verstehen, was das leicht zu entwerfende Gegenstück zu einem Objekt-Attribut in Python (Tornado) ist. Der folgende Code für die Objekterstellung aus dieser SO-Antwort (https://stackoverflow.com/a/2827726/4808079) wirft einige Fehler auf.

class MainHandler(tornado.web.RequestHandler): 
    def post(self): 
     #getting and parsing json works as expected 
     args = json.loads(self.request.body.decode()) 

     #can't seem to figure out how to make this jsonify well 
     out = [] 
     for num in range(0,5): 
      addMe = type('',(), {}) 
      addMe.value = num 
      addMe.square = num * num 
      out.append(addMe) 

     self.write(json.dumps(out)) 

Console Fehler:

Traceback (most recent call last): 
File "/Library/Python/2.7/site-packages/tornado/web.py", line 1509, in _execute 
    result = method(*self.path_args, **self.path_kwargs) 
File "test_tornado.py", line 43, in post 
    self.write(json.dumps(out)) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 243, in dumps 
    return _default_encoder.encode(obj) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 207, in encode 
    chunks = self.iterencode(o, _one_shot=True) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 270, in iterencode 
    return _iterencode(o, 0) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 184, in default 
    raise TypeError(repr(o) + " is not JSON serializable") 
TypeError: <class '__main__.'> is not JSON serializable 

Das entspricht dem, was ich versuche oben würde wie so sein, in JavaScript:

var out = [] 
for(var num = 0; num < 5; num++) { 
    var addMe = {}; 
    addMe.value = num; 
    addMe.square = num*num; 
    out.push(addMe); 
} 
return JSON.stringify(out); 

Wie soll ich ein strukturieren Objekt in Python, so dass es JONonifies gut?

+0

Check out simplejson - https://simplejson.readthedocs.io/en/latest/ – MikeJ

+0

Nun, Ihre Zurückverfolgungs ** nicht ** komplett . Was ist die Ausnahme? – freakish

+0

Wo wurde 'type ('',(), {})' verwendet? Das ist eine sehr merkwürdige Idee. –

Antwort

2

Sie dicts aus dem Kasten heraus kodieren:

addMe = { 
    'value': num, 
    'square': num * num 
} 
+0

ah. Sie werden Diktate und keine Objekte genannt. Vielen Dank –

Verwandte Themen