一、JSON简介
JSON(JavaScript Object Notation) 是一种通用的轻量级数据交换文本格式。它很容易让人阅读和编写,也便于机器进行解析和生成。它使用JavaScript语法来存储和描述数据对象,但是JSON完全独立于JavaScript。JSON可适用于多种流行编程语言。这些特性使JSON成为理想的数据交换格式。
二、JSON重点概念
数据 对象 数组
三、JSON语法规则要点
1、数据以“名”“值”对呈现
2、数据“名”和“值”之间由冒号分隔
3、大括号{}用于标注对象内容
4、中括号[]用于标注数组内容
5、逗号用于分隔数据、对象、数组
四、JSON数据
1、JSON数据以“名”“值”对呈现。数据“名”“值”由冒号分隔。JSON数据的书写格式是:
“JSON数据名”:JSON数据值
JSON数据举例:
“Year”: 2016
“URL”:”www.taichi-maker.com”
2、JSON数据名称
JSON数据名称需要放在双引号中。以下示例都是合法的JSON数据名:
“Value”、”信息1”
3、JSON数据值
JSON数据值可以是以下内容:
数字(整数或浮点数)
字符串
逻辑值(true 或 false)
数组(在中括号中)
对象(在大括号中)
null
注意:一个JSON数据名称只能对应一个值。
五、JSON数据的举例
1、JSON数字数据示例
“ Value ” : 123
2、JSON字符串数据示例
“ name ” : “mixly”
3、JSON逻辑值数据示
“ blool_Value ” : true
4、JSON数组数据示例

"myarray": [
    {
        "name" : "mixly",
        "URL" : "www.arduino.com"
    },
    {
        "year": 2021,
        "month": 5,
        "day": 8
    }
]

5、JSON对象数据示例

"info": {
    "name" : "arduino",
    "website" : "www.arduino.com"
}

6、JSON null 数据示例

“ Value ” : null

六、JSON 对象
JSON对象在大括号{}中书写,对象可以包含单个或者多个JSON数据。对象(object) 是一个无序的数据集合(“‘名/值’对”集合)。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名/值’ 对”之间使用“,”(逗号)分隔。
1、含有单个数据的JSON对象示例

{
    "name" : "mixly"
}

2、含有多个数据的JSON对象示例。该对象由两个JSON数据组成。

{
    "name" : "mixly",
    "website" : "www.arduino.com"
}

3、含有多个数据的JSON对象示例。该对象包含两个JSON数据。而每一个JSON数据又包含一个JSON对象。

{
  "info": {
"name": "mixly",
"website": "www.arduino.com"
  },
  "date": {
"year": 2021,
"month": 5,
"day": 8
  }
}

从以上的示例我们可以看到,JSON对象中的数据使用逗号进行分隔。

注意:对象不能直接存放对象,以下示例是错误的。

{
  {
"name": "mixly",
"website": "www.arduino.com"
  },
    {
"year": 2021,
"month": 5,
"day": 8
  }
}

注意:对象也不能直接存放数组,以下示例是错误的。

{
  "info": {
"name": "mixly",
"website": "www.arduino.com"
  },
  [
{
"temperature" : 23
}
  ]
}

七、JSON 数组
数组(array) 是相同元素的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。 如下所示:
[“mixly ”,”arduino”,”hello”] 或者[ 1,2,3,4]
1、数组可包含一个或者多个对象。以下是包含单个对象的数组示例:

[
    {
        "name" : "mixly",
        "website" : "www.arduino.com"
    }
]

2、以下是包含多个对象的数组示例:

[
    {
      "name" : "mixly",
      "website" : "arduino.com"
   },
   {
      "year": 2021,
      "month": 5,
      "day": 8
   }
]

3、数组也可以包含单个或多个数组,如下所示:

[
    [
        {
            "name" : "mixly",
            "website" : "www.arduino.com"
        },
        {
            "year": 2021,
            "month": 5,
            "day": 8
        }
    ],
    [
        {
            "temperature" : 23
        }
    ] 
]

在以上示例中。数组中的元素之间都是使用逗号进行分割的。
注意:数组不能直接存放JSON数据。以下示例是错误的。

[
"date": "2021-05-08",
"weekday": "TWO"
]

八、JSON 对象与数组混合存放示例
以下示例该JSON对象包含有一个数据,数据名为results,该数据的值是一个数组。此数组只含有一个对象。此对象包含有三个数据。这三个数据的名称分别是:location、now和last_update。其中location的值是含有两个数据的对象。now的值是含有三个数据的对象。last_update的值是字符串”2021-05-08″。

{
  "results": [
    {
      "location": {
        "name": "foshan",
        "country": "CN"
      },
      "now": {
        "text": "Clear",
        "code": "1",
        "temperature": "3"
      },
      "last_update": "2020-05-08"
    }
  ]
}

九、总结
分析出JSON数据内容注意以下几点
首先注意以下符号的含义:
:用于分隔数据的“名”和“值”
{} 标注对象内容
[]标注数组内容
,分隔数据、对象和数组
另外注意:
对象用于存放数据(名值对)。
对象不能直接存放对象或数组。
数组存放元素有序号(序号起始值0)。
数组不能直接存放数据(名值对)。

我们可以使用JSON在线工具(网址https://oktools.net/json)来验证编写的JSON是否符合语法规则。

十、两块UNO串口通信使用Arduino Json收发不同类型的数据(Arduino Json V6版本)
1、硬件连接:发送方的UNO的TX(发送数据)连接接收方的UNO的RX(接收数据),两块UNO的GND相连。
2、方法一:
发送方程序如下:
在这里插入图片描述
接收方程序如下:
在这里插入图片描述
3、方法二:作用Json在线工具(网址https://arduinojson.org/v6/assistant/)构建和解析Json(V6版本)
(一)构建发送方Json,打开Json在线工具设置如下图示
(1)第一项选AVR开发板,第二项选序列化(构建),第三项输出类型Stream
在这里插入图片描述
(2)点右下角Next:JSON下一步(将要发送的Json数据粘贴到Output方框内,这里以默认Json数据为例)
在这里插入图片描述
(3)点右下角Next:JSON下一步( 这里显示的是需要的内存大小之类)
在这里插入图片描述
(4)点右下角Next:JSON下一步(完成Json构建,生成发送代码),点左下角按键可以返回上一步。
在这里插入图片描述
(5)点击右上角Copy按键复制代码到IDE或Mixly,发送方mixly程序如下;

在这里插入图片描述
(二)接收方解析Json,打开Json在线工具设置如下图示(跟构建JSON的操作类似)
(1)第一项选AVR开发板,第二项选反序列化(解析),第三项输出类型Stream
在这里插入图片描述
(2)点右下角Next:JSON下一步(将要发送的Json数据粘贴到Input方框内,这里以默认Json数据为例
在这里插入图片描述
(4)点右下角Next:JSON下一步( 这里显示的是需要的内存大小之类)
在这里插入图片描述
4)点右下角Next:JSON下一步(完成Json解析,生成接收代码),点左下角按键可以返回上一步。
在这里插入图片描述
(6)点击右上角Copy按键复制代码到IDE或Mixly,接收方mixly程序如下;
在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐