Json-path学习笔记<一>

Json

JavaScript Object Notation (JSON)是一个轻量级的,基于文本的,跨语言的数据交换格式。它从ECMAScript编程语言标准(ECMAScript Programming Language Standard)衍生而来。JSON定义了一组用于表示结构化数据的可移植的格式化规则。

简介

JSON是用于结构化数据序列化的一种文本格式,JSON包含4种基础类型(字符串,数字,布尔和null)和两种结构类型(对象和数组)。
字符串是一个由零或者多个Unicode字符组成的序列。
对象是一个由零或者多个名/值对组成的无序集合,其中名/值对中名是字符串类型,值则可以是字符串,数字,布尔,null,对象或数组类型。
数组是一个由零或者多个值组成的有序序列。
JSON的设计目标是它应当是尽可能小的,可移植的,文本化的,并且可以作为JavaScript的一个子集。

JSON语法

一个JSON文本是一个标记(token)序列,标记包含6种结构字符,字符串,数字和3个字面量。

  • 结构字符:[ 左中括号,{ 左大括号, ] 右中括号, } 右大扩号,: 冒号,, 逗号。6种结构字符前后都可以添加无意义的空白字符。如:水平制表符\t,换行符\n,回车符\r

  • 字面量: false,null,true。字面量MUST是小写的,其他任何字面量都是不允许的。

  • 对象结构表示为一对大括号包裹着0到多个键/值对(或者叫成员)。键/值对中键是一个字符串,后面是一个冒号,用来分隔键和值。值后面是一个逗号用来分隔值和下一个键/值对的键。一个对象内的键SHOULD是唯一的。

  • 数组结构表示为一对中括号包裹着0到多个值(或者叫元素)。值之间用逗号分隔。

  • 数字的表示和其他大部分语言相似。数字包含一个以可选的减号为前缀的整数部分,其后面可以跟有小数部分和或指数部分。八进制或者十六进制的形式是不允许的。以0开头也是不允许的。小数部分是一个小数点后跟随一位或多位数字。指数部分以不限大小写的字母E开头,之后可跟一个加号或减号。E和可选的符号后可跟一位或多位数字。不能被表示为数字的序列(例如,无穷大和NaN)的数字值是不允许的。

  • 字符串用引号作为开头和结尾。除了以下一些必须被转义的字符以外所有的Unicode字符都可以直接被放在字符串中:引号(”或’),反斜杠(\)和控制字符(U+0000 到 U+001F)。

编码

JSON文本SHALL使用unicode编码。默认的编码方式为UTF-8。
由于JSON文本的头两个字符一定是ASCII字符[RFC0020],因此可以通过观察第一组4个8位字节来判断字节流是UTF-8,UTF-16(BE或LE)还是UTF-32(BE或LE)编码的。

解析器

JSON解析器可以将JSON文本转换为其他表示方法。JSON解释器MUST能接受符合JSON语法的所有文本。JSON解析器MAY能接受非JSON形式的文本。

生成器

JSON生成器能够生成JSON文本。其生成结果MUST严格符合JSON的语法。

IANA(互联网数字分配机构)方面的考虑

  • JSON文本的MIME媒体类型是application/json。JSON可以用UTF-8,UTF-16和UTF-32编码表示。如果使用UTF-8,则JSON是8位字节兼容的。如果是UTF-16或UTF-32,则必须使用二进制内容传输编码。

  • 通常,脚本语言都有安全问题,JSON作为JavaScript的一个子集,但由于它排除了分配和调用,所以它是安全的。

  • JSON发布规范:RFC 4627

Json示例

{
   "Image": {
       "Width": 800,
       "Height": 600,
       "Title": "View from 15th Floor",
       "Thumbnail": {
           "Url": "http://www.example.com/image/481989943",
           "Height": 125,
           "Width": "100"
       },
       "tags": [
           "小清新",
           "动物"
       ]
   }
}

参考规范

  • [ECMA] European Computer Manufacturers Association, “ECMAScript
    Language Specification 3rd Edition”, December 1999,
    <http://www.ecma-international.org/publications/files/
    ecma-st/ECMA-262.pdf>.

  • [RFC0020] Cerf, V., “ASCII format for network interchange”, RFC 20,
    October 1969.

  • [RFC2119] Bradner, S., “Key words for use in RFCs to Indicate
    Requirement Levels”, BCP 14, RFC 2119, March 1997.

  • [RFC4234] Crocker, D. and P. Overell, “Augmented BNF for Syntax
    Specifications: ABNF”, RFC 4234, October 2005.

原文参考Json格式定义

    原文作者:oven
    原文地址: https://segmentfault.com/a/1190000003782436
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞