查看: 471|回复: 0

ESP32 MicroPython教程:解析JSON

[复制链接]
  • TA的每日心情

    2018-1-11 13:58
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2018-11-26 11:14 | 显示全部楼层 |阅读模式
    本帖最后由 dfrobot 于 2018-11-26 14:00 编辑

    本micropython教程旨在阐释如何使用在ESP32上运行的MicroPython解析JSON字符串。

    简介

    本文旨在阐释如何使用在ESP32上运行的MicroPython解析JSON字符串。如果你想了解在ESP32上设置MicroPython的方法,请参阅这篇此前的帖子以获取详细指南。该指南还解释了如何连接Python提示符。

    为解析JSON字符串,我们将用到MicroPython uJSON库。你还可以在Github上查看该库的文档。

    我们将运用命令行测试代码,因此我们需要借助一个工具把JSON内容压缩成一行,这样我们就可以轻松地完成粘贴。我们将通过这个网站接收JSON字符串并将其压缩到一行。然后,复制JSON并在终端窗口右击,将其传递给Putty。


    代码

    连接到Python提示符后,就可以开始编码了。我们首先要做的是导入uJSON模块。只需键入下方表达式并按回车键即可。

    1 import ujson


    之后,我们就可以访问ujson对象了,这将使loads方法生效。此方法以JSON字符串作为输入值进行接收,然后返回与已解析的JSON[1]对应的对象。我们将从一个简单的JSON结构开始,该结构如下所示。

    1  {
    2  "name":"John"
    3   },


    把它压缩成一行后,我们得到如下所示的JSON字符串。

    我们现在将此字符串作为前文提到的loads方法的输入值进行传递。请注意,为了从JSON结构转义引号,我们在字符串两边添加"""符号将其括起来。对象将被存储于名为parsed(已解析)的变量中。



    1 parsed = ujson.loads("""{"name":"John"}""")


    现在,我们来验证返回对象已正确获取JSON内容。我们将其打印出来。此外,我们要使用type函数打印对象的类型。

    1   print (parsed)

    2   print (type(parsed))


    在运行完上文全部代码后,我们应该会得到一个类似于图1的结果。请注意,包含已解析内容的对象的类型是Python字典,因此以键值的形式获取内容非常适用。



    图1 - 解析JSON字符串。




    现在,我们将获取“name”键的值。它应返回“John”。要获取字典中该键的值,请发送以下命令。请注意,此过程和获取数组值相似,但此处用的不是索引,而是字符串格式的键。


    1   print(parsed["name"])




    你应该会得到类似于图2的结果。请注意,控制台上会打印姓名“John”。







    图2 - 访问字典对象的已解析值。



    为了完成示例,我们现在将解析更复杂的结构,如下所示。例如,显示从物联网设备发送的消息。



    1   {

    2    "device":"temperature",

    3    "id":543,

    4    "values":[1,2,3]

    5     }





    压缩后,我们得到以下结果:




    1  {"device":"temperature","id":543,"values":[1,2,3]}



    我们现在将对其进行解析并打印JSON结构中的所有键。我们还将打印“values”结构的类型,以了解解析程序映射它的方式。




    1    parsed = ujson.loads("""{"device":"temperature","id":543,"values":[1,2,3]}""")

    2    print (parsed["device"])

    3    print (parsed["id"])

    4    print (parsed["values"])

    5

    6    print(type(parsed["values"]))





    你应该会得到类似于图3的结果。可以看出,每个键的所有值都已正确打印。在“values”键的实例中,字典内的结构是一个列表,而不是值的字符串表示形式。这自然更为有利,因为我们可以使用列表可用的所有函数对这些值进行操作,从而降低操作难度。






    图3 – JSON内容解析后的结果。



    查看更多ESP32/ESP8266教程和项目,请点击 : ESP32教程 汇总贴


    打赏作者鼓励一下!
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    博哥零基础教你玩转ESP8266(十三) ESP8266WiFiGeneric库
    博哥零基础教你玩转ESP826
    帖子导航帖 博哥零基础教你玩转ESP8266(一) 重识ESP8266 博哥零基础教你玩转ESP8266
    求助!WeMos D1 WiFi怎么接0.96寸OLED?(ㄒoㄒ)
    求助!WeMos D1 WiFi怎么
    求助!WeMos D1 WiFi怎么接0.96寸OLED?(ㄒoㄒ) 想用WeMos D1 WiFi接收服务器的数据然
    串口发送16进制指令求助
    串口发送16进制指令求助
    我准备串口发出16进制指令到我的外置设备 代码如下图 我分别监控ARDUINO的tx口和USB口
    一文教你选择Arduino开发板,小白进
    一文教你选择Arduino开发
    笔者在2016年接触了Arduino,跳了万条坑,行了千里弯,到今天也算是Arduino的一
    大神们!1602显示屏上的MQ2浓度示数不是实时监测的何解
    大神们!1602显示屏上的MQ
    本人小白,刚刚接触arduino,长时间的查阅资料后,通过复制修改代码接线实现了DHT11实
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表