1

一直在用JSON,发现并不了解JSON。好吧,花点时间学习下。

一、JSON的概念:什么是JSON?

全称:JavaScript Object Natation(JS对象标记法),JSON用字符串的格式表示结构化数据。并且独立于语言,可以在各语言间进行数据交换。

二、JSON的语法:JSON是如何通过字符串表示结构数据的?

2.1 JSON的类型(6种):

JSON有6中数据类型示:object, array, number,string,bool(true, false),null(之前一直以为JSON数据必须要包在花括号里,囧)。绝大部分语言都有这6种数据类型,这样JSON就可以跨语言传递了(即独立于语言)。

// 以下都是合法的JSON
"{"a": 1}" // 对象
"[1,2,3,4]" // 数组
"[1,true,null,{"a":1}]" // 数组 注意表示不能夸语言,有些语言限制数组的元素类型一致
"1" // number 1
"true" // bool true
"null" // null
"\"abc\"" // 字符串 "abc"

// 以下是否非法的JOSN字符串
"undefined"

2.2 String

JSON 字符串是Unicode编码的,用双引号表示字符串(有些语言中(如JS)单引号也能表示字符串,但是毕竟大部分语言不支持这种表示,所以JSON字符串只能是双引号表示)。
字符是大小敏感的。

"\"a\\nc\"" // "a\nc" 注意 \n是转义字符,JSON还支持其他转义字符,见参考
"\"abc\"" // "abc"

2.3 Number

JSON 数字可以整数,浮点数,科学计数法表示。

"1" // 1
"0.1" // 0.1
"-1" // -1
"1e+2" // 1* (10 * 10)   -> 100 (e大小写不区分,即也可以这样表示"1E+2")
"1e-2" // 1* (0.1 * 0.1) -> 0.01

注意
A:正数不能带”+“表示
B:只能表示10进制的数字,其他进制不能表示。

2.4 对象

对象就是键值对集合了,值可以是6中类型的任意一种。

"{"a": 1, "b": true}" // 格式就是"{name1: value1, name2:value2}"

2.5 数组

数组时值的集合,值可以是6中类型的任意一种。元素类型最好是同一类型,毕竟大多数语言不支持元素类型多种类型。

"[1,2]"
"[{\"a\":1}]"

三、日期的表示

大部分语言日期都是个对象,并且不是简单的Plain Object,导致日期在各语言中JSON表示不完全一样(JavaScript中JSON.stringify方法通过Date.toString方法把日期转成字符串),所以在有日期的数据交换时要注意。一般处理方法:将日期转成各语言都支持的日期字符串格式(如:"yyyy-MM-dd hh:mm:ss"),还可以将日期通过毫秒数值表示。

四、JSON Schema

JSON Schema是一种特殊的JSON数据,它是用来描述JSON数据的。

参考

  1. JSON.org
  2. ajv
  3. 【第1276期】JSON Schema 那些事儿:基本概念

普拉斯强
2.7k 声望53 粉丝

Coder


« 上一篇
JS-对象
下一篇 »
JS-Undefined类型