编程语言·

JSON速查表

这是一个快速参考速查表,帮助理解和编写JSON格式的配置文件。

Getting Started

Introduction

JSON是一种轻量级的基于文本的开放标准,设计用于人类可读的数据交换

  • JSON 代表 JavaScript 对象表示法。
  • JSON 易于阅读和编写。
  • JSON 是一种与语言无关的数据交换格式。
  • JSON 文件扩展名是.json。
  • JSON 的互联网媒体类型是 application/json。

示例 1

{
  "name": "Jason",
  "age": 39,
  "height": 1.92,
  "gender": "M",
  "salary": 70000,
  "married": true,
  "children": [
    { "name": "Tom", "age": 9, "gender": "M" },
    { "name": "Ava", "age": 7, "gender": "F" }
  ]
}

类型

类型描述
Number双精度浮点数
String一系列字符
Booleantrue 或者 false
Array有序值序列
Value字符串、数字、布尔值、空值...
Object无序的键值对集合
null空值或空

字符串

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

示例 2

{
  "url": "https://chatsheet.org",
  "msg": "Hi,\n\"chatsheet.org\"",
  "intro": "Share quick reference and cheat sheet for developers."
}

无效字符串

{ "foo": "bar" }

必须用双引号分隔。

数字

类型描述
Integer数字 1-9、0 和正负号
Fraction小数如 0.3、3.9
Exponent指数形式如 e、e+、e-、E、E+、E

示例 3

{
  "positive": 12,
  "negative": -1,
  "fraction": 10.25,
  "exponent": 1.0e2,
  "zero": 0
}

无效数字

{ "foo": 0xff }

在 JSON 中只能使用十进制字面量。

对象

{
  "color": "紫色",
  "id": "210",
  "composition": {
    "R": 70,
    "G": 39,
    "B": 89
  },
  "empty_object": {}
}

多个键值对由逗号分隔。

数组

[1, 2, 3, 4, 5]

[ 开始,以 ] 结束。

对象数组

{
  "children": [
    { "name": "Jimmy Smith", "age": 15 }, // 子对象:名称为 "Jimmy Smith",年龄为 15
    { "name": "Sammy Sosa", "age": 12 } // 子对象:名称为 "Sammy Sosa",年龄为 12
  ]
}

这些 JSON 数据展示了数组和对象数组的结构,提供了注释进行每个字段的语义化解释。

数组的对象

{
  "attributes": ["a1", "a2"], // 属性数组包含 ["a1", "a2"]
  "methods": ["getter", "setter"], // 方法数组包含 ["getter", "setter"]
  "empty_array": [] // 空数组
}

二维数组

{
  "my_sequences": [
    [1, 2, 3], // 第一行包含 [1, 2, 3]
    [4, 5, 6], // 第二行包含 [4, 5, 6]
    [7, 8, 9, 0], // 第三行包含 [7, 8, 9, 0]
    [10, 11] // 第四行包含 [10, 11]
  ]
}

这些 JSON 数据展示了对象中包含数组和二维数组的结构,提供了注释进行每个字段的语义化解释。

对象的对象

{
  "Mark McGwire": {
    "hr": 65, // Mark McGwire 的 home run 数为 65
    "avg": 0.278 // Mark McGwire 的平均击球率为 0.278
  },
  "Sammy Sosa": {
    "hr": 63, // Sammy Sosa 的 home run 数为 63
    "avg": 0.288 // Sammy Sosa 的平均击球率为 0.288
  }
}

嵌套

{
  "Jack": {
    "id": 1, // Jack 的 id 为 1
    "name": "Franc", // Jack 的名称为 "Franc"
    "salary": 25000, // Jack 的薪资为 25000
    "hobby": ["a", "b"], // Jack 的爱好为 ["a", "b"]
    "location": {
      // Jack 的位置信息
      "country": "A", // 国家为 "A"
      "city": "A-A" // 城市为 "A-A"
    }
  }
}

在 JavaScript 中访问 JSON 数据

访问对象

let myObject = {
  name: "Jason", // 名称为 "Jason"
  last: "Doe", // 姓为 "Doe"
  age: 39, // 年龄为 39
  gender: "M", // 性别为男性
  salary: 70000, // 薪资为 70000
  married: true, // 已婚状态为真
};

console.log(myObject.name); // 输出:"Jason"
console.log(myObject["name"]); // 输出:"Jason"
console.log(myObject.age); // 输出:39
console.log(myObject.other); // 输出:未定义
console.log(myObject[0]); // 输出:未定义

myObject.name"Jason"
myObject["name"]"Jason"
myObject.age39
myObject.otherundefined
myObject[0]undefined

访问嵌套数据

let myObject = {
  ref: {
    name: 0, // ref 对象中的 name 键为 0
    last: 1, // ref 对象中的 last 键为 1
    age: 2, // ref 对象中的 age 键为 2
    gender: 3, // ref 对象中的 gender 键为 3
    salary: 4, // ref 对象中的 salary 键为 4
    married: 5, // ref 对象中的 married 键为 5
  },
  jdoe: ["Jason", "Doe", 39, "M", 70000, true], // jdoe 数组包含 ["Jason", "Doe", 39, "M", 70000, true]
  jsmith: ["Tom", "Smith", 42, "F", 80000, true], // jsmith 数组包含 ["Tom", "Smith", 42, "F", 80000, true]
};

console.log(myObject.ref.age); // 输出:2
console.log(myObject["ref"]["age"]); // 输出:2
console.log(myObject.jdoe); // 输出:["Jason", "Doe", 39, "M", 70000, true]
console.log(myObject.jsmith[3]); // 输出:"F"
console.log(myObject[1]); // 输出:未定义

这段代码展示了如何访问嵌套的数据结构,并提供了注释进行语义化的解释。


myObject.ref.age2
myObject["ref"]["age"]2
myObject.jdoe"Jason", "Doe", 39 ...
myObject.jsmith[3]"F"
myObject[1]undefined

访问对象数组

let myArray = [
  {
    name: "Jason",
    last: "Doe",
    age: 39,
    gender: "M",
    salary: 70000,
    married: true,
  },
  {
    name: "Tom",
    last: "Smith",
    age: 42,
    gender: "F",
    salary: 80000,
    married: true,
  },
  {
    name: "Amy",
    last: "Burnquist",
    age: 29,
    gender: "F",
    salary: 60000,
    married: false,
  },
];

myArray[0]{"name": "Jason", ...}
myArray[1].name"Tom"
myArray[1][2]42
myArray[3]undefined
myArray[3].genderTypeError: Cannot read...

访问数组

let myArray = ["Jason", "Doe", 39, "M", 70000, true];

| | | | ------------ | :-------- | -------------------- | | myArray[1] | "Doe" | // 下标 1 对应 "Doe" | | myArray[5] | true | // 下标 5 对应 true | | myArray[6] | undefined | // 下标 6 未定义 |

还可参考