Hola Nekmo. Creo que me he explicado mal, la idea de usar repr() no es para parsear JSON que para eso ya existe el módulo json. Mi intención es cachear peticiones JSON/RPC que se traducen en diccionarios python en el lado del server. Para lo cual necesito que estos diccionarios puedan formar parte de las keys de un diccionario que contiene los resultados cacheados. Para tal fin hay que transformar estos diccionarios en objetos inmutables y repr() es una de las opciones, otra podria ser Pickle.
Si las cadenas json/rpc son muy largas, simpre se pueden acortar en md5: jsonObj = { "method": "echo", "params": ["Hello JSON-RPC"], "id": 1} result = doJsonMethod(jsonObj) hashable = md5.new(cPickle.dumps(jsonObj)).digest() cache[hashable] = result Salud. El 24 de abril de 2011 12:52, Nekmo <conta...@nekmo.com> escribió: > Si usas repr no te va a funcionar. Python no es igual a la sintaxis de > Javascript (la cual es JSON). Por ejemplo, mientras que en JSON tienes > false, true y null, en Python tienes False, True y None, lo cual te > provocará a la hora de trabajar con el "pseudo JSON" bonitos errores > del tipo "False no está definida", además de que como tengas algo que > no sea un string en la key de un diccionario, a la hora de interpretar > el JSON también te petará (en el caso de usar el módulo JSON, te > petará al dumpear xD). > > Un cordial saludo: > -- Nekmo. > > Sitio web: http://nekmo.com > Dirección de contacto: conta...@nekmo.com > XMPP/Jabber: conta...@nekmo.com > Identi.ca: http://identi.ca/nekmo > Diaspora: Nekmo > > > > El día 23 de abril de 2011 14:24, tny <a.por...@gmail.com> escribió: > > El lun, 18-04-2011 a las 18:24 +0200, Pepe Aracil escribió: > >> Hola Lista. > >> > >> Tengo que cachear objetos JSON, es decir puedo encontrarme con listas y > >> diccionarios > >> que son mutables y por tanto al no ser "hashables" no pueden formar > parte > >> de las keys > >> de un diccionario. > >> > >> Una idea es pasar todos los objetos mutables (diccionarios y listas) a > >> inmutables (tuplas) > >> mediante una función recursiva. > >> > >> Ejemplo: > >> {"method":"foo", "params":["sota","caballo"]} --> (("method","foo"), > >> (params,("sota","caballo"))) > >> Este sistema se me antoja algo "Gastón" en cuanto a ciclos CPU > >> > >> El otro método consiste en usar la representación en cadena del objeto > >> usando repr(objeto): > >> repr({"method":"foo", "params":["sota","caballo"]}) -> '{"method":"foo", > >> "params":["sota","caballo"]}' > >> > >> > >> ¿Alguna idea más al respecto? > >> > >> Gracias. > >> _______________________________________________ > >> Python-es mailing list > >> Python-es@python.org > >> http://mail.python.org/mailman/listinfo/python-es > >> FAQ: http://python-es-faq.wikidot.com/ > > > > Voto por repr > > > > Y mucho mejor si deribas la clase de los objetos JSON y le añades el > > metodo hash, de modo que te cree el hash de la representación del json > > > > > > _______________________________________________ > > Python-es mailing list > > Python-es@python.org > > http://mail.python.org/mailman/listinfo/python-es > > FAQ: http://python-es-faq.wikidot.com/ > > > _______________________________________________ > Python-es mailing list > Python-es@python.org > http://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ >
_______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/