json两种结构

1、对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是
数字、字符串、数组、对象几种:

名称\值对

按照最简单的形式,可以用下面这样的 JSON 表示"名称 / 值对":


1

{"firstName":"Brett"}

这个示例非常基本,而且实际上比等效的纯文本"名称 / 值对"占用更多的空间:


1

firstName=Brett

但是,当将多个"名称 / 值对"串在一起时,JSON 就会体现出它的价值了。首先,可以创建包含多个"名称 / 值对"的 记录,比如:


1

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

从语法方面来看,这与"名称 / 值对"相比并没有很大的优势,但是在这种情况下 JSON 更容易使用,而且可读性更好。例如,它明确地表示以上三个值都是同一记录的一部分;花括号使这些值有了某种联系。

2、数组:数组在js中是中括号“[]”括起来的内容,数据结构为
["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种:

当需要表示一组值时,JSON 不但能够提高可读性,而且可以减少复杂性。例如,假设您希望表示一个人名列表。在XML中,需要许多开始标记和结束标记;如果使用典型的名称 / 值对(就像在本系列前面文章中看到的那种名称 / 值对),那么必须建立一种专有的数据格式,或者将键名称修改为
person1-firstName这样的形式。

如果使用 JSON,就只需将多个带花括号的记录分组在一起:


1

2

3

4

5

6

7

{

    "people":[

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

        {"firstName":"Jason","lastName":"Hunter","email":"bbbb"},

        {"firstName":"Elliotte","lastName":"Harold","email":"cccc"}

    ]

}

这不难理解。在这个示例中,只有一个名为 people的变量,值是包含三个条目的数组,每个条目是一个人的记录,其中包含名、姓和电子邮件地址。上面的示例演示如何用括号将记录组合成一个值。当然,可以使用相同的语法表示多个值(每个值包含多个记录):


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

{

    "programmers": [{

        "firstName": "Brett",

        "lastName": "McLaughlin",

        "email": "aaaa"

    }, {

        "firstName": "Jason",

        "lastName": "Hunter",

        "email": "bbbb"

    }, {

        "firstName": "Elliotte",

        "lastName": "Harold",

        "email": "cccc"

    }],

    "authors": [{

        "firstName": "Isaac",

        "lastName": "Asimov",

        "genre": "sciencefiction"

    }, {

        "firstName": "Tad",

        "lastName": "Williams",

        "genre": "fantasy"

    }, {

        "firstName": "Frank",

        "lastName": "Peretti",

        "genre": "christianfiction"

    }],

    "musicians": [{

        "firstName": "Eric",

        "lastName": "Clapton",

        "instrument": "guitar"

    }, {

        "firstName": "Sergei",

        "lastName": "Rachmaninoff",

        "instrument": "piano"

    }]

}

这里最值得注意的是,能够表示多个值,每个值进而包含多个值。但是还应该注意,在不同的主条目(programmers、authors 和 musicians)之间,记录中实际的名称 / 值对可以不一样。JSON 是完全动态的,允许在 JSON 结构的中间改变表示数据的方式。

在处理 JSON 格式的数据时,没有需要遵守的预定义的约束。所以,在同样的数据结构中,可以改变表示数据的方式,甚至可以以不同方式表示同一事物。

可以创建一个新的 JavaScript 变量,然后将 JSON 格式的数据字符串直接赋值给它:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

var people = {

    "programmers": [{

        "firstName": "Brett",

        "lastName": "McLaughlin",

        "email": "aaaa"

    }, {

        "firstName": "Jason",

        "lastName": "Hunter",

        "email": "bbbb"

    }, {

        "firstName": "Elliotte",

        "lastName": "Harold",

        "email": "cccc"

    }],

    "authors": [{

        "firstName": "Isaac",

        "lastName": "Asimov",

        "genre": "sciencefiction"

    }, {

        "firstName": "Tad",

        "lastName": "Williams",

        "genre": "fantasy"

    }, {

        "firstName": "Frank",

        "lastName": "Peretti",

        "genre": "christianfiction"

    }],

    "musicians": [{

        "firstName": "Eric",

        "lastName": "Clapton",

        "instrument": "guitar"

    }, {

        "firstName": "Sergei",

        "lastName": "Rachmaninoff",

        "instrument": "piano"

    }]

};

尽管看起来不明显,但是上面的长字符串实际上只是一个数组;将这个数组放进 JavaScript变量之后,就可以很轻松地访问它。实际上,只需用点号表示法来表示数组元素。所以,要想访问 programmers 列表的第一个条目的姓氏,只需在 JavaScript
中使用下面这样的代码:


1

people.programmers[0].lastName;

注意,数组索引是从零开始的。所以,这行代码首先访问 people变量中的数据;然后移动到称为 programmers的条目,再移动到第一个记录([0]);最后,访问 lastName键的值。结果是字符串值 “McLaughlin”。

下面是使用同一变量的几个示例。


1

2

3

people.authors[1].genre  // Value is "fantasy"

people.musicians[3].lastName // Undefined. This refers to the fourth entry, and there isn‘t one

people.programmers[2].firstName // Value is "Elliotte"

利用这样的语法,可以处理任何 JSON 格式的数据,而不需要使用任何额外的 JavaScript 工具包或 API。

修改数据

正如可以用点号和方括号访问数据,也可以按照同样的方式轻松地修改数据:


1

people.musicians[1].lastName="Rachmaninov";

在将字符串转换为 JavaScript 对象之后,就可以像这样修改变量中的数据。

JSON嵌套格式

许多JavaScript树形控件使用JSON嵌套格式描述树形结构,如下所示:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

{  

  id: ‘100000‘,  

  text: ‘廊坊银行总行‘,  

  children: [  

    {  

      id: ‘110000‘,  

      text: ‘廊坊分行‘,  

      children: [  

        {  

          id: ‘113000‘,  

          text: ‘廊坊银行开发区支行‘,  

          leaf: true

        },  

        {  

          id: ‘112000‘,  

          text: ‘廊坊银行解放道支行‘,  

          children: [  

            {  

              id: ‘112200‘,  

              text: ‘廊坊银行三大街支行‘,  

              leaf: true

            },  

            {  

              id: ‘112100‘,  

              text: ‘廊坊银行广阳道支行‘,  

              leaf: true

            }  

          ]  

        },  

        {  

          id: ‘111000‘,  

          text: ‘廊坊银行金光道支行‘,  

          leaf: true

        }  

      ]  

    }  

  ]  

}  

关于JSON嵌套格式可以搜索百度词条:“多叉树”。

具体形式

编辑

1、对象是一个无序的“‘名称/值’对”集合。

(1)一个对象以“{”(左括号)开始,“}”(右括号)结束。

(2)每个“名称”后跟一个“:”(冒号);

(3)“‘名称/值’ 对”之间使用“,”(逗号)分隔。(如图所示,图中表示数据的方式是类似非确定性自动机的形式,没学过编译原理的人,可能理解起来困难点,实际上也是正则表达式的形式。下同)

例子:表示人的一个对象:


1

2

3

4

{

    "姓名":"大憨",

    "年龄":24

}

2、数组是值(value)的有序集合。

(1)一个数组以“[”(左中括号)开始,“]”(右中括号)结束。

(2)值之间使用“,”(逗号)分隔。

例子:一组学生


1

2

3

4

5

6

{

    "学生": [

        {"姓名":"小明","年龄":23},

        {"姓名":"大憨","年龄":24}

    ]

}

说明:此Json对象包括了一个学生数组,而学生数组中的值又是两个Json对象。

3、值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。

4、字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。 字符串(string)与C或者Java的字符串非常相似。

5、数值(number)也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。

时间: 2024-08-05 03:35:44

json两种结构的相关文章

理解json两种结构:数组和对象

Json是一种异常简单易懂的数据格式,关于json的规定,仅仅如下而已: 1) 并列的数据之间用逗号(", ")分隔. 2) 映射用冒号(": ")表示. 3) 并列数据的集合(数组)用方括号("[]")表示. 4) 映射的集合(对象)用大括号("{}")表示. 1. $arr = array(111,'aaa','bbb'); $arr1 = array( 'a' => 'aaa', 'b' => 222 );

XML与JSON两种数据结构比较和各自底层实现

1.XML与JSON两种数据结构的优缺点 1> XML 优点:? 格式统一, 符合标准? 容易与其他系统进行远程交互, 数据共享比较方便 ? 缺点: XML文件格式文件庞大, 格式复杂, 传输占用带宽? 服务器端和客户端都需要花费大量代码来解析XML, 不论服务器端和客户端代码变的异常复杂和不容易维护 客户端不同,浏览器之间解析XML的方式不一致, 需要重复编写很多代码? 服务器端 和 客户端 解析XML花费资源和时间 2> JSON 优点:? 数据格式比较简单, 易于读写, 格式都是压缩的,

placeholder和json两种实现登录隐藏的方法

<head> <title> placeholder和json两种实现登录隐藏的方法 </title> <script type="text/javascript"> //判断浏览器是否支持 placeholder属性 function isPlaceholder() { var input = document.createElement('input'); return 'placeholder' in input; } if (!i

Json两种解析方式

JSON数据解析的有点在于他的体积小,在网络上传输的时候可以更省流量,所以使用越来越广泛,下面介绍使用JsonObject和JsonArray的两种方式解析Json数据. 使用以上两种方式解析json均需要依赖json-lib.jar开发包使用依赖包 1.JsonObject 使用JsonObject解析只有一条数据的json是非常方便的例如:"{\"name\":\"zhangsan\",\"password\":\"zha

微处理器的两种结构比较

冯·诺依曼结构 VS 哈佛结构 1.冯·诺依曼结构 冯·诺依曼结构又称作普林斯顿体系结构(Princetionarchitecture). 1945年,冯·诺依曼首先提出了“存储程序”的概念和二进制原理,后来,人们把利用这种概念和原理设计的电子计算机系统统称为“冯·诺依曼型结构”计算机.冯·诺依曼结构的处理器使用同一个存储器,经由同一个总线传输. 冯·诺依曼结构处理器具有以下几个特点: 必须有一个存储器: 必须有一个控制器: 必须有一个运算器,用于完成算术运算和逻辑运算: 必须有输入和输出设备,

第十五讲.数据解析(XML与JSON两种数据解析)

一.XML数据解析 1.SAX:Simple API for XML.基于事件驱动的解析方式,逐行解析数据.(采用协议回调机制) NSXMLParser的解析方法: 1 #import "ViewController.h" 2 #import "Model.h" 3 4 @interface ViewController ()<NSXMLParserDelegate> 5 6 @property(nonatomic,strong)UITableView

网络操作系统按结构可以分为“对等结构操作系统”和“非对等结构操作系统”,请对这两种结构操作系统的主要特点给以简要说明。

对等结构的网络操作系统是指网络中的各个结点地位平等,因此安装在每个结点的操作系统的功能也相同,网络中的各种资源都可以实现共享.非 对等结构的网络操作系统根据功能的不同,将网络中的结点分为服务器和工作站两类,服务器用于提供网络服务和资源,工作站用于本地用户进行信息处理,通过访问服务器获得网络服务. 原文地址:https://www.cnblogs.com/aikeming/p/11674750.html

ServiceStack.Text / Newtonsoft.Json 两种json序列化性能比较

JSON序列化现在应用非常多,尤其在前后端分离的情况下,平常大多数C#下都使用Newtonsoft.Json来操作,量少的情况下,还可以忽略,但量大的情况下就要考虑使用ServiceStack.Text来操作,序列化性能差不多,反序列化性能要高一倍左右 int count = 10000; User user = new User() { Id = 1, Name = "tyh", AddTime = DateTime.Now, Age = 15, Status = true }; s

C# web api返回类型设置为json的两种方法

web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为json呢,下面就介绍两种方法: 方法一:(改配置法) 找到Global.asax文件,在Application_Start()方法中添加一句: 代码如下: GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); 修改后: 代码如下: protected void Applicati