Seite 1 von 1

simplejson und objects

Verfasst: Donnerstag 28. Februar 2008, 11:49
von würmchen
Hi Leute,
ich versuche gerade objecte zu erstellen, die ich später einfach mit simplejson dumpen will.
Die Idee ist, das ich einfach ein tuple bekomme mit den Informationen von dem Objekt.

Code: Alles auswählen

#!/usr/src/python

import simplejson

class DropDown(object):
    def __init__(self,display,value):
        self.display = display
        self.value = value
        self.drop_down = {
                "display" : self.display,
                "value" : self.value}


def main():
    test = DropDown("bla","blub")
    print simplejson.dumps(test)



if __name__ == '__main__':
    main()
Als Ergebnis erwarte ich dann ein json wie folgendes

Code: Alles auswählen

{ "display" : "bla", "value" : "blub" }
Ich hatte versucht die __repr__ methode umzuschreiben und mir einfach ein tuple returnen zu lassen, aber das geht nicht. Gibt es noch eine möglichkeit ohne immer test.drop_down zu schreiben? Oder etwas einfacheres?


Mein Ziel ist es später, wenn ich eine liste mit Objekten habe, die einfach mit einem dump als JSON Objekt auszugeben... Hoffe das ist verständlich.

Code: Alles auswählen

    test = []
    test.append(DropDown("bla","blub"))
    test.append(DropDown("blaaa","blubbbb"))
    test.append(DropDown("bbbbla","bbbblub"))
    print simplejson.dumps(test)
Das ist in etwa das was ich machen will, ergebnis soll dann sowas sein

Code: Alles auswählen

[{ "display" : "bla", "value" : "blub" },{ "display" : "blaaa", "value" : "blubbbb" },{ "display" : "bbbbla", "value" : "bbbblub" }]

Re: simplejson und objects

Verfasst: Donnerstag 28. Februar 2008, 14:01
von keppla
Ich hab mal die Doku überflogen, ich glaube, was du suchst ist der JSONEncoder

Verfasst: Donnerstag 28. Februar 2008, 18:25
von veers

Code: Alles auswählen

import simplejson

class Test:
    def __init__(self, a, b):
        self.a = a
        self.b = b

class PyJSONEncoder(simplejson.JSONEncoder):
    def default(self, obj):
        data = {}
        for name in dir(obj):
            if not name.startswith("_"):
                data[name] = getattr(obj, name)
        return data

if __name__ == "__main__":
#  prints {"a": "foo", "b": "bar"}
    print PyJSONEncoder().encode(Test("foo", "bar"))
Ergibt
{"drop_down": {"display": "bla", "value": "blub"}, "display": "bla", "value": "blub"} für dein Beispiel, wenn du das dict entfernst bekommst du jedoch auch was du erwartest ;)