JSON入门

    JavaScript Object Notation(JSON)(JavaScript对象表示法)。是一种用于结构化数据序列化的文本格式,源自JavaScript的对象文字。 JSON 的设计目标是最小化、可移植化和文本化JavaScript的子集。
    JSON 可以表示四种基本类型(字符串、数字、布尔值和 null)和两种结构化类型(对象和数组)。        字符串是零个或多个 Unicode 字符 [ UNICODE ] 的序列。对象是零个或多个名称/值对的无序集,其中名称是字符串,值是字符串、数字、布尔值、null、对象或数组。 数组是零个或多个值的有序序列。

1.JSON Grammer

       JSON文本是一个序列化的对象或数组。tokens集包括六个结构字符、字符串、数字和三个文字名称。

六个结构字符:
  • begin-array代表左方括号字符[,用于开始一个JSON数组
  • end-array代表右方括号字符],用于结束一个JSON数组
  • begin-object代表左花括号字符{,用于开始一个JSON对象(键值对集合)。
  • end-object代表右花括号字符},用于结束一个JSON对象
  • name-separator代表冒号字符:,用于分隔JSON对象中的键(名称)和值
  • value-separator代表逗号字符,,用于分隔JSON数组中的元素或JSON对象中的键值对
空白字符:

      'ws'表示一个空白字符序列,可以由以下四种字符之一组成:

  • %x20表示 ASCII 码为 20 的空格字符。
  • %x09表示 ASCII 码为 09 的水平制表符(Horizontal Tab)字符。
  • %x0A表示 ASCII 码为 0A 的换行(New Line)字符。
  • %x0D表示 ASCII 码为 0D 的回车(Carriage Return)字符。

1.1 JSON的值

        必须是对象、数组、数字或字符串,或以下三个字面值名称之一:false、null、true(必须小写),即value = false / null / true / object / array / number / string

1.2 对象Objects

由begin-object和end-object('{ }'包围之间的零个或多个member组成。

member:表示一个名称/值对或成员,由一个字符串(名称)和一个值(可以是任意JSON值)组成,两者由name-separator(' : ')分隔,值后面可以由value-separator(' , ')分隔。

1.3数组

        数组结构表示为包含零个或多个值(或元素)的方括号,元素之间用逗号分隔。

1.4数字

表示:
  1. 整数部分:可以有一个可选的负号(减号)作为前缀。
  2. 小数部分:可以包含一个小数点,后面跟着一个或多个数字。
  3. 指数部分:可以包含一个大小写字母 E,后面可以跟着一个可选的正负号,然后是一个或多个数字。
约束:
  • 不允许使用八进制和十六进制形式的数字。
  • 不允许在数字前面有前导零(即前面多余的零)。
  • 不允许表示不能用数字序列表示的数值,比如 Infinity 和 NaN

1.5 字符串

  1. 字符串以引号(quotation marks)开始和结束。使用双引号表示字符串,不允许使用单引号。
  2. 在引号之间可以包含任意Unicode字符,但必须对某些特殊字符进行转义,包括引号自身、反斜杠和控制字符(U+0000到U+001F范围内的字符)。
  3. 可以对任意字符进行转义。对于位于基本多文种平面(Basic Multilingual Plane,U+0000到U+FFFF范围内)的字符,可以用六个字符的序列来表示:反斜杠,后跟小写字母'u',然后是四个十六进制数字,表示字符的代码点。十六进制的字母A到F可以是大写或小写。例如,只包含单个反斜杠字符的字符串可以表示为"\u005C"。
  4. 另外,一些常用字符可以使用两个字符的转义序列表示。例如,只包含单个反斜杠字符的字符串可以更紧凑地表示为"\"。
  5. 对于不在基本多文种平面之外的扩展字符,需要使用十二个字符的序列来表示,编码为UTF-16代理对(surrogate pair)。例如,只包含G谱号字符(U+1D11E)的字符串可以表示为"\uD834\uDD1E"。

2.Encoding

JSON文本必须使用Unicode编码。默认的编码格式是UTF-8

(xx是非零字节)

3.例子 


{         "Image": {
                 "Width": 800,
                 "Height": 600,
                 "Title": "View from 15th Floor",
                 "Thumbnail": {
                         "Url": "http://www.example.com/image/481989943",
                         "Height": 125,
                         "Width": "100"
                 },
                 "IDs": [116, 943, 234, 38793]

}

       这是一个包含图片信息的JSON对象,其中包括图片的尺寸、标题、缩略图的URL和尺寸,以及一组图片ID。

[
         {
                 "precision": "zip",
                 "Latitude": 37.7668,
                 "Longitude": -122.3959,
                 "Address": "",
                 "City": "SAN FRANCISCO",
                 "State": "CA",
                 "Zip": "94107",
                 "Country": "US"
         },
         {
                 "precision": "zip",
                 "Latitude": 37.371991,
                 "Longitude": -122.026020,
                 "Address": "",
                 "City": "SUNNYVALE",
                 "State": "CA",
                 "Zip": "94085",
                 "Country": "US"
         }
 ]

        这是一个包含两个元素的JSON数组。每个元素都表示一个位置的信息,包括经度、纬度以及所在城市、州、邮编等相关信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值