Micropython中如何将bytearray地址正确存入JSON文件并保留单反斜杠
解决MicroPython中DS18B20地址存JSON的转义问题
问题根源
你遇到的反斜杠丢失/双反斜杠问题,本质是JSON字符串转义规则和Python字节对象的repr()输出规则冲突导致的:JSON仅支持\u开头的Unicode转义、\n/\t等少数特殊转义,不识别Python字节表示中的\x转义序列,直接存储repr(bytearray)的结果必然会出现转义异常。
最优解决方案(推荐)
不要直接存储字节对象的字符串表示,将字节地址转为十六进制字符串后再存储,完全规避转义问题:
- 存储前转换:将拿到的DS18B20字节地址转为十六进制ASCII串
# addr为读传感器获取的原始bytearray地址 addr = bytearray(b'(b\xe5V\xb5\x01<:') # 转为纯ASCII十六进制字符串,无任何特殊转义符 addr_hex = addr.hex() # 直接将addr_hex存入JSON文件即可
- 读取后还原:从JSON读出十六进制串后直接转回原始bytearray
# addr_hex_from_json为从JSON读取到的十六进制字符串 addr = bytearray.fromhex(addr_hex_from_json) # 还原后的addr和原始传感器地址完全一致,可直接用于后续温度读取操作
双反斜杠问题补充说明
你预先转义反斜杠后读取到的双反斜杠,只是Python打印字符串repr()结果的展示效果,实际内存中存储的是单个反斜杠,可通过len()函数验证字符串长度确认。但该方案后续需要自行解析字符串还原字节地址,实现复杂、容易出错,完全不推荐使用。
内容的提问来源于stack exchange,提问作者Ma Sch
相关产品推荐
相关产品推荐

