查看: 183|回复: 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教程 汇总贴


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

    本版积分规则

    热门推荐

    KittenBot杯第六届开源硬件开发大赛启动啦
    KittenBot杯第六届开源硬
    大赛简介: 第六届开源硬件开发大赛由Arduino中文社区发起 由KittenBot冠名赞助
    arduino温湿度无线传感控制系统
    arduino温湿度无线传感控
    求求你我真的不会,要挂科了,我快哭了真的。如何把功能1234合在一起,目前只会功能2
    请问大神们,这是怎么回事
    请问大神们,这是怎么回事
    出现了这个问题,不知道怎么改,求助大神
    [游戏发布]飞机大战
    [游戏发布]飞机大战
    飞机大战游戏,你可以通过按键控制飞机躲避障碍,直到30000分通关 你要控制飞
    一 个 维 信,改 变你 的 一 生
    一 个 维 信,改 变你 的
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表