JSON的两种结构

JSON结构共有2种:

  1. 对象结构(无序):
    无序的对象结构在不同语言中称法不同,比如在Python中称为字典,在JS中称为JSON对象……总之就是键/值对组合形式。刚才我转换出来的JSON结构就是无序的键/值对组合
  2. 数组结构(有序):
    有序的的数组结构,即代码片断2所展示的结构。将数组作为有序数组进行转换JSON,就可以得到有序的JSON数组结构。

对象结构

对象结构是使用大括号“{}”括起来的,大括号内是由0个或多个用英文逗号分隔的“关键字:值”对(key:value)构成的。

语法:

var jsonObj =
{"键名1":值1,"键名2":值2,……"键名n":值n
}

注意:

  • jsonObj指的是json对象。对象结构是以“{”开始,到“}”结束。其中“键名”和“值”之间用英文冒号构成对,两个“键名:值”之间用英文逗号分隔。
  • 这里的键名是字符串,但是值可以是数值、字符串、对象、数组或逻辑true和false。

JSON数组结构

JSON数组结构是用中括号“[]”括起来,中括号内部由0个或多个以英文逗号“,”分隔的值列表组成。

语法:

var arr =
[{"键名1":值1,"键名2":值2},{"键名3":值3,"键名4":值4},……
]

注意:

  • arr指的是json数组。数组结构是以“[”开始,到“]”结束,这一点跟JSON对象不同。在JSON数组中,每一对“{}”相当于一个JSON对象,大家看看像不像?而且语法都非常类似。
  • 这里的键名是字符串,但是值可以是数值、字符串、对象、数组或逻辑true和false。

代码片断1

代码如下:

{"button":[{    "type":"click","name":"今日歌曲","key":"V1001_TODAY_MUSIC"},{"type":"click","name":"歌手简介","key":"V1001_TODAY_SINGER"},{"name":"菜单","sub_button":[{    "type":"view","name":"搜索","url":"http://www.soso.com/"},{"type":"view","name":"视频","url":"http://v.qq.com/"},{"type":"click","name":"赞一下我们","key":"V1001_GOOD"}]}]}

代码片断2

代码如下:

{"button": {"1": {"type": "click","name": "今日歌曲","key": "V1001_TODAY_MUSIC"},"2": {"type": "click","name": "歌手简介","key": "V1001_TODAY_SINGER"},"3": {"name": "菜单","sub_button": [{"type": "view","name": "搜索","url": "http://www.soso.com/"},{"type": "view","name": "视频","url": "http://v.qq.com/"},{"type": "click","name": "赞一下我们","key": "V1001_GOOD"}]}}
}

JSON 数据格式

json格式采用key:value的方式记录数据,非常直观,比XML简洁,因而大受欢迎

添加 JSON

在使用名称/值对或 XML 时,实际上是使用 JavaScript 从应用程序中取得数据并将数据转换成另一种数据格式。在这些情况下,JavaScript 在很大程度上作为一种数据操纵语言,用来移动和操纵来自 Web 表单的数据,并将数据转换为一种适合发送给服务器端程序的格式。但是,有时候 JavaScript 不仅仅作为格式化语言使用。在这些情况下,实际上使用 JavaScript 语言中的对象来表示数据,而不仅是将来自 Web 表单的数据放进请求中。在这些情况下,从 JavaScript 对象中提取数据,然后再将数据放进名称/值对或 XML,就有点儿多此一举了。这时就适合使用 JSON:JSON 允许轻松地将 JavaScript对象转换成可以随请求发送的数据(同步或异步都可以)。

JSON 并不是某种魔弹;但是,它对于某些非常特殊的情况是很好的选择。

简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。这个字符串看起来有点儿古怪(稍后会看到几个示例),但是 JavaScript 很容易解释它,而且 JSON 可以表示比名称/值对更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。

简单 JSON 示例

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

{ "firstName": "Brett" }

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

firstName=Brett

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

{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" }

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

值的数组

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

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

{"people": [{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },{ "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },{ "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }
]}

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

{"programmers": [{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },{ "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },{ "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }],"authors": [{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },{ "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }],"musicians": [{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }]
}

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

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

将 JSON 数据赋值给变量掌握了 JSON 格式之后,在 JavaScript 中使用它就很简单了。JSON 是 JavaScript 原生格式,这意味着在JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。

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

var people ={ "programmers": [{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },{ "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },{ "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }],"authors": [{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },{ "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }],"musicians": [{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }]}

这非常简单;现在 people 包含前面看到的 JSON 格式的数据。但是,这还不够,因为访问数据的方式似乎还不明显。

访问数据

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

people.programmers[0].lastName;

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

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

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。

修改 JSON 数据

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

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

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

转换回字符串

在 JavaScript中这种转换也很简单:

String newJSONtext = people.toJSONString();

现在就获得了一个可以在任何地方使用的文本字符串,例如,可以将它用作 Ajax 应用程序中的请求字符串。更重要的是,可以将任何 JavaScript 对象转换为 JSON 文本。并非只能处理原来用 JSON 字符串赋值的变量。为了对名为 myObject 的对象进行转换,只需执行相同形式的命令:

String myObjectInJSON = myObject.toJSONString();

这就是 JSON 与本系列讨论的其他数据格式之间最大的差异。如果使用 JSON,只需调用一个简单的函数,就可以获得经过格式化的数据,可以直接使用了。对于其他数据格式,需要在原始数据和格式化数据之间进行转换。即使使用 Document Object Model 这样的 API(提供了将自己的数据结构转换为文本的函数),也需要学习这个API 并使用 API 的对象,而不是使用原生的 JavaScript 对象和语法。

最终结论是,如果要处理大量 JavaScript 对象,那么 JSON 几乎肯定是一个好选择,这样就可以轻松地将数据转换为可以在请求中发送给服务器端程序的格式。

JSON 数据结构、数据格式相关推荐

  1. JSON数据结构(A、快速入门篇)(Yanlz+Data+JsonArray+JsonObject+JsonValue+JsonMapper.ToJson+JsonMapper.ToObject+)

    <JSON数据结构> 版本 作者 参与者 完成日期 备注 Data_JSON_V01_1.0 严立钻 2018.08.24 ++++一个好用的JSON在线编辑:http://www.kjs ...

  2. Restful API 生成复杂Json数据结构及使用客户端解析该数据结构(三)

    前提说明:首先约定接口之前,需要约定接口的参数,接口参数包括输入参数和输出参数 输入参数:指接口调用时输入的参数 输出参数:即接口调用时返回的参数. 那么如果说,约定输入输出参数均需要采用Json结构 ...

  3. JSON 分析数据格式

    2014年4月26日本10:55:15 从三月初开始,并JSON战斗.学校不教怎样做,己..大规模的搜索啊.发表这篇文章,喜欢我和不知道如何开始的新手! 和 XML 如.JSON 也是基于纯文本数据格 ...

  4. Json数据结构比对

    本文,产生这个需求的原因是,api数据测试的时候需要校验json的数据格式,原来都是人眼去对比的,太折磨人了,作为程序员那就更加不能折磨自己了. ps:让后台人员添加,后台人员懒得弄,反正折磨又不是他 ...

  5. 全网最全json数据结构可视化工具汇总

    全网最全json数据结构可视化工具汇总 1.前言 2. 可视化工具 2.1 JSON Viewer Pro(推荐) 2.2 JSONGrid(推荐) 2.3 json2html(推荐) 2.4 Onl ...

  6. Json的数据格式的定义

    Json是一种数据格式,任何语言都可以使用. 用途: 1.组织数据(数据序列化),用于数据的网络传输 2.组织数据(数据序列化),写磁盘文件实现数据的持久化存储(一般以.json 作为文件后缀) 数据 ...

  7. 个人永久性免费-Excel催化剂功能第90波-xml与json数据结构转换表格结构

    在网络时代,大量的数据交互以xml和json格式提供,特别是系统间的数据交互和网络WebAPI.WebService接口的数据提供,都是通过结构化的xml或json提供给其他应用调用返回数据. 若能提 ...

  8. 修改软件服务器json返回数据格式,AngularJS处理服务器端返回的JSON数据的格式问题...

    用ng的$http服务发起ajax请求,php返回的JSON数据格式要正确! 一开始我的php页面是这样返回数据的: if($result){ $oid = mysqli_insert_id($con ...

  9. 心电图数据结构化标准_自己实现一个类 JSON 数据结构

    JSON,仅支持极少的数据类型,或者是为了跨平台和语言的兼容性,又或者是因为其他什么原因.总之,它虽然成为现在网络传输接口中最普遍的数据结构,但由于自身限制,在使用过程中它也给开发者带来了一些负担.诸 ...

最新文章

  1. IKE IPSEC ×××
  2. 17. 搭建FTP服务端
  3. Bzoj 3343: 教主的魔法(分块+二分答案)
  4. 【BUG记录】> Android dependency ‘androidx.vectordrawable:vectordrawable‘ has different
  5. Drawing绘图halcon算子,持续更新
  6. Spark架构与作业执行流程简介
  7. SQL必知必会-数据插入
  8. shell实例100例《六》
  9. Tensorflow基本语法和实现神经网络
  10. spss主成分综合得分_权重赋值之“主成分分析法”
  11. python读取udp数据包内容_python – 解析UDP数据包
  12. python概率分析_请问如何通过Python做R*C列表的Fisher确切概率分析?
  13. 009-lissajous(一)
  14. Python xls转换为xlsx
  15. 【进阶版】 机器学习之主成分分析(PCA)、MDS算法、核化线性降维 (16)
  16. 海内存知己,天涯若比邻
  17. 别傻了!不能只会给别人开热点,要尝试华为手机的WiFi分享功能
  18. PDF编辑器哪个好用,怎么在PDF上修改文字
  19. 【Android Dialog】Dialog
  20. python爬虫学习_junior

热门文章

  1. 【Win10高分辨率缩放】Win10系统画面图标太小
  2. 编译原理实验二 自上而下的语法分析器(算术表达式)
  3. 修饰数码相机图像以便用于 CMYK 打印作业
  4. 教你怎么把iconfont转换成png透明图片
  5. uni-app 汉字转拼音 搜索和按首字母排序页面
  6. 面向机密计算的Enclave容器技术栈
  7. 中国蜗牛行业市场供需与战略研究报告
  8. 无损放大图片软件有哪些?试试这些图片无损放大工具
  9. Me and My Girlfriend:1
  10. 透视矩阵的推导(最直观、最深入、最还原,看完请点赞。)