simplejson und objects

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
würmchen
User
Beiträge: 255
Registriert: Mittwoch 7. November 2007, 14:17

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" }]
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Ich hab mal die Doku überflogen, ich glaube, was du suchst ist der JSONEncoder
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

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 ;)
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Antworten