JSON文件格式规范详解

发布时间:2023-05-19

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,不仅在JavaScript中广泛应用,也被许多其他编程语言所支持。它具有语法简单、易于解析和生成、可读性强等特点,逐渐成为Web开发中常用的数据交换格式之一。本文将从多个方面详细解释JSON文件格式规范,帮助读者更好地了解和使用JSON。

一、语法规范

JSON文件由一系列名值对(key-value pairs)组成。每个名值对之间用逗号(,)分隔,整个文件需要用花括号({})包裹。如下是一个简单的JSON文件示例:

{
  "name": "Tom",
  "age": 18,
  "gender": "male"
}

在JSON文件中,key通常是字符串类型,需要用双引号(")表示;value可以是字符串、数字、布尔值、数组、对象等类型。数组需要用方括号([])包裹,每个元素用逗号(,)分隔;对象同样需要用花括号({})包裹,每个名值对用逗号(,)分隔。示例如下:

{
  "name": "Tom",
  "age": 18,
  "gender": "male",
  "scores": [90, 85, 95],
  "info": {
    "school": "ABC University",
    "major": "Computer Science"
  }
}

另外,在JSON文件中,可以使用空白符(空格、制表符、换行符等)来增加代码的可读性。JSON解析器不会对空白符做任何处理。

二、数据类型

JSON文件支持6种数据类型,分别为:

  1. 字符串(string):表示文本字符序列,需要用双引号(")表示。
    "user": "Tom"
    
  2. 数字(number):表示数值,包括整数和浮点数。
    "age": 18,
    "score": 98.5
    
  3. 布尔值(boolean):表示真或假,只有两个值:truefalse
    "male": true
    
  4. null:表示空值。
    "address": null
    
  5. 数组(array):表示一组有序的值,需要用方括号([])包裹,每个元素之间用逗号(,)分隔。
    "scores": [90, 85, 95]
    
  6. 对象(object):表示一组无序的键值对集合,需要用花括号({})包裹,每个键值对之间用逗号(,)分隔。
    "info": {
      "school": "ABC University",
      "major": "Computer Science"
    }
    

三、转义字符

在字符串值中,如果要出现特殊字符(如双引号、反斜杠等),需要使用转义字符(反斜杠 \)对其进行转义。

"message": "I am a \"good\" student."

下表列出了JSON文件中常见的转义字符:

转义字符 含义
\\ 转义为反斜杠
\" 转义为双引号
\/ 转义为斜杠
\b 转义为退格符
\f 转义为换页符
\n 转义为换行符
\r 转义为回车符
\t 转义为制表符

四、JSONP

JSONP(JSON with Padding)是一种跨域数据交互技术,用于解决浏览器跨域访问数据的问题。JSONP的原理是通过动态创建 <script> 标签,实现跨域请求数据,并通过回调函数的方式解析返回的数据。JSONP的使用需要配合服务端进行处理。 下面是一个JSONP请求的示例:

<script>
function requestData(data) {
  console.log(data);
}
var script = document.createElement('script');
script.src = 'http://example.com/api?callback=requestData';
document.body.appendChild(script);
</script>

以上代码可以实现通过JSONP方式请求 example.com 接口,返回数据后调用 requestData 函数进行处理。

五、JSON Schema

JSON Schema 是一种用于验证和描述 JSON 文件的规范。它可以用于定义 JSON 文件的结构,验证 JSON 文件是否符合规范等。 下面是一个 JSON Schema 的示例:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "User",
  "type": "object",
  "properties": {
    "name": {
      "type": "string"
    },
    "age": {
      "type": "integer"
    },
    "gender": {
      "type": "string",
      "enum": ["male", "female"]
    },
    "scores": {
      "type": "array",
      "items": {
        "type": "integer"
      }
    },
    "info": {
      "type": "object",
      "properties": {
        "school": {
          "type": "string"
        },
        "major": {
          "type": "string"
        }
      }
    }
  },
  "required": ["name", "age"]
}

以上 JSON Schema 定义了一个 "User" 对象,包含 "name"、"age"、"gender"、"scores" 和 "info" 等字段。其中,"name" 和 "age" 是必填项,"gender" 只能取 "male" 或 "female" 两个值,"scores" 是一个整数数组,"info" 是一个对象,其中包含 "school" 和 "major" 两个字段。通过 JSON Schema,可以方便地验证 JSON 文件是否符合要求。