No entiendo que haces con archivo... Nunca he programado con json en python.
¿Como seria a partir de lo que indicas el parseo de los datos? Es decir, ¿Como seria el bucle que me iria dando el name y el value? 2014-06-03 22:08 GMT+02:00 Flavio Danesse <fdane...@gmail.com>: > Voto por lo correcto que sería así: > > import os > import json > import codecs > > text = '{"format":"JSON","result":{"devices":[{"key":"SCGDE1BA:180340320", etc > . . . > > path = "/tmp/x.json" > > archivo = open(path, "w") > archivo.write(text) > archivo.close() > > archivo = codecs.open(path, "r", "utf-8") > diccionario = json.JSONDecoder("utf-8").decode(archivo.read()) > > > El 3 de junio de 2014, 8:03, <gust...@nodo50.org> escribió: > > ejecutando esto: >> >> #!/usr/bin/python3 >> import re >> value_str = >> >> '{"format":"JSON","result":{"devices":[{"key":"SCGDE1BA:180340320","channels":[{"name":"PF","unit":"","meta":"PF","value":"1.000"},{"name":"P-WSpt","unit":"kW","meta":"P-WSpt","value":"935"},{"name":"Vac","unit":"V","meta":"Vac","value":"217.5"},{"name":"Iac","unit":"A","meta":"Iac","value":"513.8"},{"name":"Pac","unit":"kW","meta":"Pac","value":"335.2"},{"name":"Qac","unit":"kVAr","meta":"Qac","value":"-1.0"},{"name":"Sac","unit":"kVA","meta":"Sac","value":"335.1"},{"name":"Fac","unit":"Hz","meta":"Fac","value":"49.950"},{"name":"ErrNoFirst","unit":"","meta":"ErrNoFirst","value":"0"},{"name":"P-WModFailStt","unit":"","meta":"P-WModFailStt","value":"Off"},{"name":"P-WModStt","unit":"","meta":"P-WModStt","value":"Off"},{"name":"Dsc","unit":"","meta":"Dsc","value":"---"},{"name":"Firmware-9","unit":"","meta":"Firmware-9","value":""},{"name":"Cntry","unit":"","meta":"Cntry","value":"DE1"} >> >> ,{"name":"Type","unit":"","meta":"Type","value":"SCG"},{"name":"Mode","unit":"","meta":"Mode","value":"Operation"},{"name":"Error","unit":"","meta":"Error","value":"---"}]}]},"version":"1.0"' >> >> for channel_str in re.findall("\"name\":\"[A-Za-z0-9\-.]+\"",value_str): >> for channel_str1 in >> re.findall("\"value\":\"[A-Za-z0-9\-.]+\"",value_str): >> print ( channel_str + ";" + channel_str1 ) >> >> me da esto: >> >> "name":"Cntry";"value":"335.2" >> "name":"Cntry";"value":"-1.0" >> "name":"Cntry";"value":"335.1" >> "name":"Cntry";"value":"49.950" >> "name":"Cntry";"value":"0" >> "name":"Cntry";"value":"Off" >> "name":"Cntry";"value":"Off" >> "name":"Cntry";"value":"---" >> "name":"Cntry";"value":"DE1" >> "name":"Cntry";"value":"SCG" >> "name":"Cntry";"value":"Operation" >> "name":"Cntry";"value":"---" >> "name":"Type";"value":"1.000" >> "name":"Type";"value":"935" >> "name":"Type";"value":"217.5" >> "name":"Type";"value":"513.8" >> "name":"Type";"value":"335.2" >> "name":"Type";"value":"-1.0" >> "name":"Type";"value":"335.1" >> "name":"Type";"value":"49.950" >> >> >> te vale? >> >> >> >> >> >> > Hola a todos, >> > >> > Estoy intentando parsear con Python una gran cadena que recibo en un >> > software de comunicaciones que estoy programando. >> > >> > La cadena que yo recibo es la siguiente: >> > >> > value_str = >> > >> {"format":"JSON","result":{"devices":[{"key":"SCGDE1BA:180340320","channels":[{"name":"PF","unit":"","meta":"PF","value":"1.000"},{"name":"P-WSpt","unit":"kW","meta":"P-WSpt","value":"935"}, >> > >> > >> {"name":"Vac","unit":"V","meta":"Vac","value":"217.5"},{"name":"Iac","unit":"A","meta":"Iac","value":"513.8"},{"name":"Pac","unit":"kW","meta":"Pac","value":"335.2"},{"name":"Qac","unit":"kV >> > >> > >> Ar","meta":"Qac","value":"-1.0"},{"name":"Sac","unit":"kVA","meta":"Sac","value":"335.1"},{"name":"Fac","unit":"Hz","meta":"Fac","value":"49.950"},{"name":"ErrNoFirst","unit":"","meta":"ErrNoFirst","value":"0"},{" >> > >> > >> name":"P-WModFailStt","unit":"","meta":"P-WModFailStt","value":"Off"},{"name":"P-WModStt","unit":"","meta":"P-WModStt","value":"Off"},{"name":"Dsc","unit":"","meta":"Dsc","value":"---"},{"name":"Firmware-9","unit":"","meta":"Firmware-9","value":" >> > "},{"name":"Cntry","unit":"","meta":"Cntry","value":"DE1"} >> > >> ,{"name":"Type","unit":"","meta":"Type","value":"SCG"},{"name":"Mode","unit":"","meta":"Mode","value":"Operation"},{"name":"Error","unit":"","meta":"Error","value":"---"}]}]},"version":"1.0" >> > >> > >> > Yo solo quiero quedarme con los name y value existente. >> > >> > LA forma en la que lo estoy intentando es la siguiente: >> > >> > for channel_str in re.findall("\"name\":\"[A-Za-z0-9\-. >> > ]+\",\"value\":\"[A-Za-z0-9\-. ]*\"",value_str): >> > d_value = re.findall("[A-Za-z0-9.\-]+",channel_str) >> > >> > Pero de esta forma no entra en el for. >> > >> > ¿Alguien me puede ayudar? >> > >> > Gracias y un saludo >> > >> > >> > >> > >> > >> > >> > -- >> > Miguel Ángel Rodríguez de Alba >> > 678304435 >> > maro...@gmail.com >> > _______________________________________________ >> > Python-es mailing list >> > Python-es@python.org >> > https://mail.python.org/mailman/listinfo/python-es >> > FAQ: http://python-es-faq.wikidot.com/ >> > >> >> >> _______________________________________________ >> Python-es mailing list >> Python-es@python.org >> https://mail.python.org/mailman/listinfo/python-es >> FAQ: http://python-es-faq.wikidot.com/ >> > > > _______________________________________________ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > > -- Miguel Ángel Rodríguez de Alba 678304435 maro...@gmail.com
_______________________________________________ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/