资料传输格式 JSON

在没有网路的年代,人们获取资讯的来源可能是报章杂志、广播电视等等,报章杂志的排版需要符合出版业的要求,广播的频道也有特定的频率,那麽网路世界的资料是不是也有特定的格式要求呢?

答案当然是有的,不然我铺这麽长的梗是为了什麽?

常见的资料传输格式

谈论到资料传输最常讨论的两个格式便是 JSON ( JavaScript Object Notation ) 和 XML ( EXtensible Markup Language ),JSON 还没发明前,大多是使用 XML,JSON 可以取代 XML 最大的原因大概便是它主打的轻量,为什麽可以做到轻量呢?先来看看三个宝物资料以 XML 和 JSON 的格式呈现有什麽差异?

// XML 格式

<treasures>
  <treasure>
    <type>gold</type> <value>100000</value>
  </treasure>
  <treasure>
    <type>silver</type> <value>2000</value>
  </treasure>
  <treasure>
    <type>jade</type> <value>5000</value>
  </treasure>
</treasures>
//JSON 格式

{"treasures":[
  { "type":"gold", "value": 100000 },
  { "type":"silver", "value": 2000 },
  { "type":"jade", "value": 5000 }
]}

光是三笔资料就可以观察到XML格式储存了重复的属性名称,在资料量变多的状况下,档案会明显地更庞大造成传输速度变慢。

除了这两个格式以外,还有人提到一个叫YAML的格式,是一种适合表达资料序列化的格式。

奇怪小知识:YAML是"'YAML Ain't a Markup Language"的递回缩写,递回缩写指的是参照自己而形成的缩写,据说这种命名方式原先是骇客社群的传统,但後来也渗透到各个领域。举几个比较知名的例子:

  • GNU (GNU's Not UNIX): 一个自由的作业系统,其设计类似Unix
  • VISA (Visa International Service Association): 对,就是大家信用卡上的VISA

好,岔题结束,我们还是言归正传地来认识JSON吧!

JSON

语法规则

JSON 的语法是归属在JavaScript 语法规则下的子集,所以会觉得莫名熟悉,先看个简单的例子:

 {"name":"Ironman"}
  • JS物件有key-value pairs,JSON则是name-value pairs
  • JS物件key值可以是字串或数字,JSON的name值必须是字串,而且要用双引号
  • JSON的value的值是 string 时,必须用双引号包裹,单引号会出错

资料类型

基本上物件能存的,JSON都可以储存,但有三种值不行

  • 函式
  • 日期
  • undefined

JavaScript处理JSON的内建函式

JSON之所以成为现今主流的资料传输格式,还有一点是因为大多的程序语言都有内建的方法或函式库,将JSON字串格式转成物件,我们先前提到的XML则需要使用专属的解析器,相较起来,JSON的操作容易许多。

来实际试试看JS提供的两个方法

  • 把物件转成JSON JSON.stringfy()
    注:先前有提到value值不能是undefined,实际来踩雷看看会怎麽样

确实转成JSON string,不过因为owner的value值是undefined,所以直接被忽略呢!!!

  • 把JSON转成物件 JSON.parse()

无聊冷笑话之JSON的反义词是什麽?

JSOFF。/images/emoticon/emoticon01.gif

参考资料:
w3school
资料传输三种格式
Introducing JSON
YAML - wiki
递回缩写


<<:  [SQL] 读 XML 格式文件写入 SQL table

>>:  [Angular] Day22. Common Routing Tasks(二)

从「递回」策略迁移到「堆叠」暂存

再探链结串列与树结构 在前三天的刷题实战中,我们一起实作了线性的链结串列和非线性的树相关的题目。其...

ASP.NET Core MVC

什麽是 MVC 分别是 Model, View, Controller, 是一种软件架构, View...

# Day 25 Heterogeneous Memory Management (HMM) (Summary)

文件 原文文件:Heterogeneous Memory Management (HMM) 摘要 这...

加上random与time模组,限制次数与时间的管理(3)

关於match的档案管理 第一,我们需要做删除的动作 第二,或者说,自订排程 删除档案 + 新增档案...

选择动物页面

可以先去https://www.ifreesite.com/upload/ 这里上传图片取得网址 点...