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/

Responder a