02 JSON基础知识

JSON基础知识

JSON数据格式

JSON的格式是有一组键值对形式的内容出现的,具体示例如下:

{
    "conference":"OSCON",
    "speechTitle":"JSON at Work",
    "track":"Web APIS"
}

名称-值对具有以下特性:

  • 每一个键名
    • 位于冒号左边
    • 是一个字符串,而且必须由双引号括起来
  • 值位于冒号的左边。值的类型有很多,稍后介绍

JSON类型

在上面说到了名称-值对的数据类型。类型包括以下几种

1、对象

对象由名称-值组成。

示例1:展示一个地址的对象

{
    "address":{
        "line1":"55 any street",
        "city":"Denver",
        "counttry":"USA"
    }
}

示例2:展示一个带有数组的对象

{
    "user":{
        "firstName":"zhang",
        "lastName":"san",
        "top":[
            "JSON",
            "REST",
            "API"
        ]
    }
}

对象具有以下特性:

  • 由一组大括号组成,可以是空对象
  • 由一些无序的名称-值对组成,以逗号分隔
  • 可以内嵌在其他对象或数组中

2、数组

示例:一个内嵌其他对象和数组的数组,该数组描述了包含标题、长度和摘要信息的会议报告

{
    "presentations":[
        {
            "title":"JSON at work",
            "length":"90 min",
            "abstract":[
                "JSON is more than just a simple replacement for XML when you make an AJAX call"
            ],
            "trak":"web apis"
        },
        {
            "title":"JSON at work",
            "length":"90 min",
            "abstract":[
                "JSON is more than just a simple replacement for XML when you make an AJAX call"
            ],
            "trak":"web apis"
        }
    ]
}

数组具有以下特征:

  • 由中括号组成,可以是空数组
  • 数组是有序的,多个数组之间用以逗号分隔
  • 可以内嵌在其他数组或对象中
  • 具有以0依次叠加的索引值

3、字符串

下面展示一些合法的字符串

[
  "fred",
  "fred\t",
  "\b",
  "",
  "\t",
  "\u004a"
]

注意:在这里显示的是源码,在实际运行中并不是这样的,对应如下

[
    "fred",
    "fred	",
    "",
    "",
    "	",
    "J"
]

字符串具有以下特征:

  • 由包含在双引号间的0个或多个Unicode字符组成。
  • 由单引号引起来的字符串为非法字符串。

JSON字符串还可以包含由反斜杠转义的字符

\" 双引号
\\ 反斜杠
\/ 正斜杠
\b 退格
\f 换页
\n 换行
\r 回车
\t Tab制表符
\u 后跟4个十六进制数字表示一个Unicode字符

4、数值

以下展示一些合法的JSON数组

{
  "age":24,
  "a":299.99,
  "a1":-1,
  "b":0.02,
  "c":1.23e11,
  "c2":1.13e+11,
  "d":6.023E23,
  "d1":6.023E+23,
  "e":10e-3,
  "e":10E-3
}

注意:在这里显示的是源码,在实际运行中并不是这样的,对应如下

{
   "age":24,
   "a":299.99,
   "a1":-1,
   "b":0.02,
   "c":123000000000,
   "c2":113000000000,
   "d":602300000000000000000000,
   "d1":602300000000000000000000,
   "e":0.01
}

数值遵循JavaScript的双精度浮点数格式,并且具有以下特征

  • 数值永远是十进制(只能出现数组0~9),不能以0开头
  • 数值可以存由小数点开头的小数部分
  • 数值可以以10为低的指数,该指数由e和E来表示
  • 与JavaScript不同,数值不能是NaN(非法数值),也不能是Infinity

5、布尔值

展示JSON的布尔值

{
	"flag":true
}

布尔值具有以下特征:

  • 只有两个字:true和false
  • 冒号右边不需要使用引号

6、null

从技术上说,null并不是一种值类型,而是JSON中的一个特殊值。

{
	"address":{
		"line1":"555",
		"line2":null
	}
}

null具有以下特性:

  • 不需要使用引号
  • 表示某个属性没有值,使用null来进行占位

JSON的注释

一言以避之,JSON中没有注释。

在JSON刚开始时是支持注释的,在后面不久就移除了注释:

  • 开发者认为注释没有什么用处
  • JSON解析器对于注释解析存在困难
  • 移除注释有助于JSON实现跨平台性

JSON文件及MIME类型

在JSON标准文档中,.json就是文件系统中存储JSON的文件后缀名。

在媒体类型(MIME)中,文件传递格式为application/json

JSON编码规范

API设计者对JSON使用者提及简单说明了三点:

1、属性名

属性名中命名规范遵循以下两点要求:

  • 小驼峰式命名法
  • 以下划线分割的短语

当使用小驼峰命名法时,属性名是由单个或多个词拼接而成的一个属性名,其中除第一个此词外,其余每个词的第一个字符开头大写

2、日期类型的值

开发者考虑到使用JSON的程序员们可能来自不同国家,即使在一家公司也会存在使用不同日期格式的。从而采用所有时区一致的日期/时间处理机制并保持互操作性。

{
	"dateRegistered":"2020-08-30T23:46:21-08:00"
}

3、经纬度值

google maps等地址信息API以及与地理信息系统相关的其他API会用到经纬度数据。为了保持一致,Google的JSON编码规范经纬度数据时遵循ISO 6709标准。

{
	"empireStateBuliding":"40.748747-73.985547"
}

02 JSON基础知识

上一篇:web_wsgi


下一篇:Centos8 Jenkins asp.net.core CICD 简单记录下dotnet cicd(二)