• 【ESP32_8266_WiFi (九)】JSON基础


    JSON基础

    1 JSON概念

    JSON(JavaScript Object Notation) 是一种通用的轻量级数据交换文本格式。它很容易让人阅读和编写,也便于机器进行解析和生成。它使用JavaScript语法来存储和描述数据对象,但是JSON完全独立于JavaScript。JSON可适用于多种流行编程语言。这些特性使JSON成为理想的数据交换格式。

    JSON重点概念
    数据、对象、数组


    2 JSON语法规则要点

    • 数据以“名”“值”对呈现
    • 数据“名”和“值”之间由冒号分隔
    • 大括号{}用于标注对象内容
    • 中括号[]用于标注数组内容
    • 逗号用于分隔数据、对象、数组

    3 JSON数据

    JSON数据以“名”“值”对呈现。数据“名”“值”由冒号分隔。

    JSON数据的书写格式是
    “JSON数据名”:JSON数据值

    JSON数据举例:
    “Year”: 2016
    “URL”:”www.taichi-maker.com”

    JSON数据名称
    JSON数据名称需要放在双引号中。以下示例都是合法的JSON数据名:
    “Value””信息1”

    JSON数据值
    JSON数据值可以是以下内容:

    • 数字(整数或浮点数)
    • 字符串
    • 逻辑值(true 或 false)
    • 数组(在中括号中)
    • 对象(在大括号中)
    • null

    注:一个JSON数据名称只能对应一个值。以下是一系列JSON数据的举例。

    3.1 JSON数字数据示例

    "value" : 25
    
    • 1

    3.2 JSON字符串数据示例

    "name" : "taichi-maker"
    
    • 1

    3.3 JSON逻辑值数据示例

    "bool_value" : true
    
    • 1

    3.4 JSON数组数据示例

    "info": [
        {
            "name" : "taichi-maker",
            "website" : "www.taichi-maker.com"
        },
        {
            "year": 2020,
            "month": 12,
            "day": 30
        }
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.5 JSON对象数据示例

    "info": {
        "name" : "taichi-maker",
        "website" : "www.taichi-maker.com"
    }
    
    • 1
    • 2
    • 3
    • 4

    3.6 JSON null 数据示例

    “value” : null
    
    • 1

    4 JSON 对象

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


    以下是含有单个数据的JSON对象示例:

    {
        "name" : "taichi-maker"
    }
    
    • 1
    • 2
    • 3

    以下是含有多个数据的JSON对象示例。该对象由两个JSON数据组成。

    {
        "name" : "taichi-maker",
        "website" : "www.taichi-maker.com"
    }
    
    • 1
    • 2
    • 3
    • 4

    我们再来看一个含有多个数据的JSON对象示例。该对象包含两个JSON数据。而每一个JSON数据又包含一个JSON对象。

    {
      "info": {
    			"name": "taichi-maker",
    			"website": "www.taichi-maker.com"
    		  },
      "date": {
    			"year": 2020,
    			"month": 12,
    			"day": 30
    		  }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

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


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

    {
      {
    	"name": "taichi-maker",
    	"website": "www.taichi-maker.com"
      },
      {
    	"year": 2020,
    	"month": 12,
    	"day": 30
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

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

    {
      "info": {
    			"name": "taichi-maker",
    			"website": "www.taichi-maker.com"
    		  },
      [
    	{
    	"temperature" : 15
    	}
      ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    5 JSON数组

    数组(array) 是相同元素的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。 如下所示:

    ["Tom","Jerry","Shuke","Beita"][1,3,5,7]

    数组可包含一个或者多个对象。以下是包含单个对象的数组示例:

    [
        {
            "name" : "taichi-maker",
            "website" : "www.taichi-maker.com"
        }
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

    [
        {
          "name" : "taichi-maker",
          "website" : "www.taichi-maker.com"
       },
       {
          "year": 2020,
          "month": 12,
          "day": 30
       }
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

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

    [
        [
            {
                "name" : "taichi-maker",
                "website" : "www.taichi-maker.com"
            },
            {
                "year": 2020,
                "month": 12,
                "day": 30
            }
        ],
        [
            {
                "temperature" : 15,
            }
        ]
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    请留意,在以上示例中。数组中的元素之间都是使用逗号进行分割的。


    :数组不能直接存放JSON数据。以下示例是错误的。

    [
    	"date": "2020-02-02",
    	"weekday": "THU"
    ]
    
    • 1
    • 2
    • 3
    • 4

    6 6. JSON 对象与数组混合存放示例

    通过以下示例我们可以看到,该JSON对象包含有一个数据,数据名为results,该数据的值是一个数组。此数组只含有一个对象。此对象包含有三个数据。这三个数据的名称分别是:location、now和last_update。其中location的值是含有两个数据的对象。now的值是含有三个数据的对象。last_update的值是字符串”2020-03-01T20:10:00+08:00″。

    {
      "results": [
        {
          "location": {
          				  "name": "Beijing",
        				  "country": "CN"
         			 },
          "now": {
          				 "text": "Clear",
         			     "code": "1",
       			         "temperature": "3"
       		    },
          "last_update": "2020-03-01T20:10:00+08:00"
        }
      ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    7 总结

    JSON文件乍一看很复杂,但只要注意以下几点就可以分析出JSON数据内容。

    首先注意以下符号的含义:

    1. 用于分隔数据的“名”和“值”
    2. {} 标注对象内容
    3. []标注数组内容
    4. 分隔数据、对象和数组


    另外注意:

    • 对象用于存放数据(名值对)。
    • 对象不能直接存放对象或数组。
    • 数组存放元素有序号(序号起始值0)。
    • 数组不能直接存放数据(名值对)。

    网上有很多网页JSON工具供我们使用。这里推荐oktools.net网站JSON在线工具。您可以使用该工具解析JSON文件,也可以用它来验证编写的JSON是否符合语法规则。



    内容来自 -----> 太极创客
    详情可见太极创客官网,内有Arduino、ESP32等详细教程
    http://www.taichi-maker.com

  • 相关阅读:
    Reflect的作用,target,property,value,receiver代表啥
    nacos 注解
    146. LRU 缓存
    手写 Vue 系列 之 从 Vue1 升级到 Vue2
    【深度学习】基于卷积神经网络(tensorflow)的人脸识别项目(三)
    leetcode刷题笔记——位运算
    齐岳|阿霉素/四氧化三铁纳米粒微球|钆参杂四氧化三铁Fe3O4复合纳米粒子
    【Python计算机视觉】Python全栈体系(二十六)
    ReentrantLock与synchronized区别之比较(面试)
    git clone 遇到了 early EOF index-pack failed 问题
  • 原文地址:https://blog.csdn.net/K3169/article/details/127838227