我有以下代码:
buff=esp.flash_read(esp.flash_user_start(),50)
print(buff)
我从打印得到以下输出: bytearray(b'{“ ssid”:“ mySSID”,“ password”:“ myPASSWD”} \ xff \ xff \ xff \ xff \ xff \ xff')
我想做的是获取buff中的json。正确的“ Python方式”是什么?
答案 0 :(得分:0)
buff
是Python bytes object,如print
开头的b'
输出所示。要将其转换为字符串,您需要对其进行解码。
您可以在标准Python中使用
buff.decode(errors='ignore')
请注意,如果不指定errors=ignore
,则会得到一个UnicodeDecodeError
,因为\xff
字节在默认编码UTF-8中无效。大概它们正在填充,而您想忽略它们。
如果在ESP8266上可以使用,那就太好了!但是,来自MicroPython文档的this建议该关键字语法可能未实现-我没有ESP8266对其进行测试。如果不是,那么您可能需要自己删除填充字符:
textLength = find(buff, b'\xff')
text = buff[0:textLength].decode()
或简单地:
text = buff[0:buff.find(b'\xff')].decode()
如果decode
也未实现,而online MicroPython interpreter中也没有实现,则可以使用str
:
text = str(buff[0:find(buff, b'\xff')], 'utf-8')
在这里,您必须明确指定要从UTF-8解码(或指定的任何编码)。
但是,如果您真正想要的是JSON中编码的值,则应该能够使用json
模块将它们检索到dict中:
import json
j = json.loads(buff[0:buff.find(b'\xff')])
ssid = j['ssid']
password = j['password']