• Json详解


    一、json 语法规则
      JSON 是一个标记符的序列。这套标记符包含六个构造字符、字符串、数字和三个字面
    名。
      JSON 是一个序列化的对象或数组。

    1. 六个构造字符:
    begin-array = ws %x5B ws ; [ 左方括号
    begin-object = ws %x7B ws ; { 左大括号
    end-array = ws %x5D ws ; ] 右方括号
    end-object = ws %x7D ws ; } 右大括号
    name-separator = ws %x3A ws ; : 冒号
    value-separator = ws %x2C ws ; , 逗号

    2. 在这六个构造字符的前或后允许存在无意义的空白符(ws):
    ws = *(%x20 /; 空间
    %x09 /; 水平标签
    %x0A /; 换行或换行
    %x0D); 回程 

     3.JSON 的值:
    3.1 JSON 的构成: ws 值 ws [1]
    3.2 值可以是对象、数组、数字、字符串或者三个字面值(false、null、true)中的一个。
    值中的字面值中的英文必须使用小写。
    3.2.1 对象由花括号括起来的逗号分割的成员构成,成员是字符串键和上文所述的值由
    逗号分割的键值对组成,如:

    1. {"name": "John Doe", "age": 18, "address": {"country" : "china",
    2. "zip-code": "10000"}}

    JSON 中的对象可以包含多个键值对,并且有数组结构,该语言正是一次实现过程内容
    的描述。 
    3.2.2 数组是由方括号括起来的一组值构成,如: 

    [3, 1, 4, 1, 5, 9, 2, 6]

    3.2.3 字符串与 C 或者 Java 的字符串非常相似。字符串是由双引号包围的任意数量
    Unicode 字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串
    (character string)。
    3.2.4 数字也与 C 或者 Java 的数值非常相似。除去未曾使用的八进制与十六进制格式。
    除去一些编码细节。 
    一些合法的 JSON 的实例: 

    1. {"a": 1, "b": [1, 2, 3]}
    2. [1, 2, "3", {"a": 4}]
    3. 3.14
    4. "plain_text"

    二、json 与 js 对象的关系
    很多人搞不清楚 JSON 和 JS 对象的关系,甚至连谁是谁都不清楚。其实,可以这么
    理解:
    JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一
    个字符串。

    1. var obj = {a: 'Hello', b: 'World'}; //这是一个对象,注意键名也是可以使用
    2. 引号包裹的
    3. var json = '{"a": "Hello", "b": "World"}'; //这是一个 JSON 字符串,本质
    4. 是一个字符串

    三、json 和 js 对象互转
    要实现从 JSON 字符串转换为 JS 对象,使用 JSON.parse() 方法: 

    1. var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //结果是
    2. {a: 'Hello', b: 'World'}

    要实现从 JS 对象转换为 JSON 字符串,使用 JSON.stringify() 方法:

    1. var json = JSON.stringify({a: 'Hello', b: 'World'}); //结果是
    2. '{"a": "Hello", "b": "World"}'

    四、常用类型

     任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是
    对象和数组是比较特殊且常用的两种类型。
    对象:对象在 JS 中是使用花括号包裹 {} 起来的内容,数据结构为 {key1:value1,
    key2:value2, ...} 的键值对结构。在面向对象的语言中,key 为对象的属性,value 为对应
    的值。键名可以使用整数和字符串来表示。值的类型可以是任意类型。
    数组:数组在 JS 中是方括号 [] 包裹起来的内容,数据结构为 ["java", "javascript",
    "vb", ...] 的索引结构。在 JS 中,数组是一种比较特殊的数据类型,它也可以像对象那样使
    用键值对,但还是索引使用得多。同样,值的类型可以是任意类型。

    五、基础示例分析

    简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可
    以在网络或者程序之间轻松地传递这个字符串,并在需要的时候将它还原为各编程语言所支
    持的数据格式,例如在 PHP 中,可以将 JSON 还原为数组或者一个基本对象。在用到 AJAX
    时,如果需要用到数组传值,这时就需要用 JSON 将数组转化为字符串。 [3]
    1、表示对象
    对象是一个无序的“‘名称/值’对”集合。一个对象以{左括号开始,}右括号结束。每个“名
    称”后跟一个:冒号;“‘名称/值’ 对”之间使用,逗号分隔。

    {"firstName": "Brett", "lastName": "McLaughlin"}

     

    2、表示数组
    和普通的 JS 数组一样,JSON 表示数组的方式也是使用方括号 []。

    1. {
    2. "people":[
    3. {
    4. "firstName": "Brett",
    5. "lastName":"McLaughlin"
    6. },
    7. {
    8. "firstName":"Jason",
    9. "lastName":"Hunter"
    10. }
    11. ]
    12. }

    这不难理解。在这个示例中,只有一个名为 people 的变量,值是包含两个条目的数组,
    每个条目是一个人的记录,其中包含名和姓。上面的示例演示如何用括号将记录组合成一个
    值。当然,可以使用相同的语法表示更过多的值(每个值包含多个记录)。
    在处理 JSON 格式的数据时,没有需要遵守的预定义的约束。所以,在同样的数据结
    构中,可以改变表示数据的方式,也可以使用不同方式表示同一事物。
    如前面所说,除了对象和数组,你也可以简单地使用字符串或者数字等来存储简单的数
    据,但这样并没有多大意义。 

  • 相关阅读:
    KaFormer个人笔记整理
    成功解决:文档根元素 “mapper“ 必须匹配 DOCTYPE 根 “null“
    串口通信协议
    驱动开发,stm32mp157a开发板的led灯控制实验(优化),使用ioctl函数,让write/read函数的专注读写功能
    零拷贝技术:减少数据复制和上下文切换,提高网络传输效率(下)
    Docker使用问题汇总
    Qt中事件的处理
    docker脚本镜像同步
    微信小程序本地开发
    ReactNative 入门
  • 原文地址:https://blog.csdn.net/weixin_54253218/article/details/136193567