JSON简介

引言

JSON,全称JavaScript对象表示法,是一种用于共享数据的格式。顾名思义,JSON源自JavaScript编程语言,但可供包括Python、Ruby、PHP和Java在内的许多语言使用。通常将JSON的发音类似于名字”Jason”。

JSON也是可读性强、轻量级的,它是XML的良好替代品,并且需要较少的格式化工作。这本信息指南将讨论你可以在JSON文件中使用的数据以及这种格式的一般结构和语法。

理解句法和结构

JSON在独立存在时使用.json扩展名,在另一种文件格式中(如.html)定义时,它可以出现在引号内作为JSON字符串,或者它可以是分配给一个变量的对象。这种格式在Web服务器与客户端或浏览器之间进行传输。

一个JSON对象是一个键值数据格式,通常以大括号表示。当你使用JSON时,你通常会在一个.json文件中遇到JSON对象,但它们也可以存在于程序的上下文中,作为一个JSON对象或字符串。

以下是一个JSON对象的示例。

{
  "first_name" : "Sammy",
  "last_name" : "Shark",
  "location" : "Ocean",
  "online" : true,
  "followers" : 987 
}

尽管这只是一个简短的例子,而JSON可以有很多行,但这表明该格式通常由两个花括号(或大括号)组成,分别用{ }表示,并且在两者之间填充着键值对。大部分JSON中使用的数据最终会被封装在一个JSON对象中。

键值对之间用冒号分隔,例如 “key” : “value”。每个键值对之间用逗号分隔,因此一个 JSON 列表的中间部分如下所示:”key” : “value”, “key” : “value”, “key”: “value”。在上述示例中,第一个键值对是 “first_name” : “Sammy”。

JSON键位于冒号的左侧。它们需要用双引号括起来,例如 “key”,并且可以是任何有效的字符串。在每个对象中,键必须是唯一的。这些键字符串可以包含空格,例如 “first name”,但是在编程时这样可能会更难访问,所以最好使用下划线,例如 “first_name”。

在冒号的右侧找到JSON值。在细粒度层面上,这些值需要是以下六种数据类型之一:

  • strings
  • numbers
  • objects
  • arrays
  • Booleans (true or false)
  • null

在更宽泛的层面上,值也可以由JSON对象或数组这样的复杂数据类型组成,这将在下一节中进行讨论。

传入 JSON 中作为值的每个数据类型都将保持其自己的语法,意味着字符串将用引号括起来,但数字则不会。

使用.json文件,通常会将格式扩展到多行,但JSON也可以全部写在一行中,如以下示例所示。

{ "first_name" : "Sammy", "last_name": "Shark",  "online" : true, }

当你遇到其他文件类型或者遇到一个JSON字符串时,这种情况更为普遍。

在多行上编写JSON格式通常使其更易读,在处理大型数据集时尤其如此。因为JSON忽略其元素之间的空白,所以您可以在冒号和键值对之间加入空格,以使数据更容易被人类读取。

{ 
  "first_name"  :  "Sammy", 
  "last_name"   :  "Shark", 
  "online"      :  true 
}

需要注意的是,尽管它们看起来很相似,但JSON对象与JavaScript对象的格式不同,因此尽管您可以在JavaScript对象中使用函数,但在JSON中不能将其用作值。JSON最重要的特征是可以以所有参与的编程语言都可以处理的格式快速传输。相比之下,只能通过JavaScript编程语言直接处理JavaScript对象。

JSON 可以通过嵌套的对象和数组构成的层级结构变得越来越复杂。接下来,您将学习更多关于这些复杂结构的知识。

在JSON中使用复杂类型进行工作

除了嵌套数组外,JSON可以以JSON格式存储嵌套对象。这些对象和数组将作为分配给键的值传递,并且也可以由键-值对组成。

嵌套的对象 de

在下面的users.json文件中,对于每个用户(”sammy”,”jesse”,”drew”,”jamie”),都有一个嵌套的JSON对象作为它们的值,其中包含与每个用户相关的自己的嵌套键”username”和”location”。以下代码块中的每个用户条目都是一个嵌套的JSON对象的示例。

用户.json
{ 
  "sammy" : {
    "username"  : "SammyShark",
    "location"  : "Indian Ocean",
    "online"    : true,
    "followers" : 987
  },
  "jesse" : {
    "username"  : "JesseOctopus",
    "location"  : "Pacific Ocean",
    "online"    : false,
    "followers" : 432
  },
  "drew" : {
    "username"  : "DrewSquid",
    "location"  : "Atlantic Ocean",
    "online"    : false,
    "followers" : 321
  },
  "jamie" : {
    "username"  : "JamieMantisShrimp",
    "location"  : "Pacific Ocean",
    "online"    : true,
    "followers" : 654
  }
}

在这个例子中,使用花括号构成了一个嵌套的JSON对象,其中包含了四个用户的相关用户名和位置数据。和其他值一样,当使用对象时,逗号被用来分隔元素。

嵌套数组

数据也可以通过使用JavaScript数组嵌套在JSON格式中作为值进行传递。JavaScript在数组类型的两端使用方括号[]。数组是有序集合,可以包含不同数据类型的值。

例如,当处理可以分组在一起的大量数据时,您可以使用数组,比如当一个用户关联着各种网站和社交媒体资料时。

通过第一个嵌套数组,”Sammy”的用户个人资料可以表示如下:

用户个人资料.json
{ 
  "first_name" : "Sammy",
  "last_name" : "Shark",
  "location" : "Ocean",
  "websites" : [
    {
      "description" : "work",
      "URL" : "https://www.digitalocean.com/"
    },
    {
      "desciption" : "tutorials",
      "URL" : "https://www.digitalocean.com/community/tutorials"
    }
  ],
  "social_media" : [
    {
      "description" : "twitter",
      "link" : "https://twitter.com/digitalocean"
    },
    {
      "description" : "facebook",
      "link" : "https://www.facebook.com/Silicon CloudCloudHosting"
    },
    {
      "description" : "github",
      "link" : "https://github.com/digitalocean"
    }
  ]
}

“websites”键和”social_media”键分别使用一个数组来嵌套属于Sammy的两个网站链接和三个社交媒体个人资料链接的信息。你能够通过方括号的使用来识别它们是数组。

在您的JSON格式中使用嵌套可以让您处理更复杂和具有层次结构的数据。

比较JSON和XML

XML,即可扩展标记语言(eXtensible Markup Language),是一种存储可由人类和机器读取的可访问数据的方式。XML格式可在许多编程语言中使用。

在许多方面,XML与JSON相似,但它需要更多的文本,导致读写所需时间更长,并且需要更多的解析器来解析XML,而JSON则可以使用标准函数进行解析。此外,与JSON不同,XML不能使用数组。

这里是XML格式的一个示例。

用户.xml
<users>
    <user>
        <username>SammyShark</username> <location>Indian Ocean</location>
    </user>
    <user>
        <username>JesseOctopus</username> <location>Pacific Ocean</location>
    </user>
    <user>
        <username>DrewSquir</username> <location>Atlantic Ocean</location>
    </user>
    <user>
        <username>JamieMantisShrimp</username> <location>Pacific Ocean</location>
    </user>
</users>

现在,比较以JSON格式呈现的相同数据。

用户.json
{"users": [
  {"username" : "SammyShark", "location" : "Indian Ocean"},
  {"username" : "JesseOctopus", "location" : "Pacific Ocean"},
  {"username" : "DrewSquid", "location" : "Atlantic Ocean"},
  {"username" : "JamieMantisShrimp", "location" : "Pacific Ocean"}
] }

JSON比XML更加紧凑,而且不需要结束标签。另外,与XML不同的是,XML没有像JSON这个例子中使用数组(通过方括号可以看出)。

如果你熟悉HTML,你会注意到XML在使用标记的方式上非常相似。虽然JSON比XML更简洁、更简洁,并且在许多情况下,包括Ajax应用程序中使用快速,但在决定使用什么数据结构之前,首先要了解你正在处理的项目类型。

结论是

JSON是一种轻量级的格式,可以让您分享、存储和处理数据。作为一种格式,JSON在API中得到了越来越多的支持,包括Twitter API。JSON也是JavaScript中自然的格式,并且在许多流行的编程语言中有许多可用的实现。您可以在“介绍JSON”网站上阅读完整的语言支持信息。

由于你很可能不会自己创建.json文件而是从其他来源获取它们,因此重要的是思考JSON的结构而不是如何在程序中最好地使用JSON。例如,你可以使用开源工具”Mr. Data Converter”将在电子表格程序中找到的CSV或制表符分隔的数据转换为JSON。你还可以使用Creative Commons许可的”utilities-online.info”网站将XML转换为JSON,反之亦然。

最后,当将其他数据类型转换为JSON,或者创建自己的JSON时,你可以使用JSONLint来验证你的JSON,并且可以在网页开发环境中使用JSFiddle来测试你的JSON。

广告
将在 10 秒后关闭
bannerAds