前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JSON基础

JSON基础

作者头像
FunTester
发布2020-02-17 16:12:27
7660
发布2020-02-17 16:12:27
举报
文章被收录于专栏:FunTesterFunTester

本文整理自《JSON必知必会》一书,主要是章节的简介,把前三个章的内容简单叙述了,算是需要JSON的基础知识。以后有机会看情况再写一些Java的jsonobject的实践文章。

正文开始:

在深入讨论 JSON 之前,先让我们对它有一个感性的认识。宏观上看, JSON 是一种轻量的数据格式,在各种地方传递数据。直观上看, JSON里的数据是被保存在花括号({})中的,而如果从用途上进一步分析,最终得出结论:JSON 是一种数据交换格式。

1.1 JSON是一种数据交换格式

数据交换格式是一种在不同平台间传递数据的文本格式。除JSON外,你也可能听说过XML这种数据交换格式。像XMLJSON这样的数据交换格式非常重要,我们需要它们来实现不同系统间的数据交换。

1.2 JSON独立于编程语言

JSON 的全称是 JavaScript Object Notation(JavaScript 对象表示法)。这个 名字可能会让人误以为要想理解和使用 JSON,得先学习 JavaScript。诚然, 在学习 JSON 前学一点 JavaScript 肯定会有帮助,毕竟 JSON 源于 JavaScript 的一个子集。但如果你以后用不到 JavaScript,那也没有必要去学习它,因 为数据交换格式是独立于语言的。你仍可以在你自己的系统中使用你自己 的语言。

2.1 JSON基于JavaScript对象

JSON 是基于 JavaScript 对象字面量的。注意是“基于”。在 JavaScript(以及大多数包含对象概念的编程语言)中,对象里面常常包含函数。数据交换格式的核心是数据,所以JSON 中并不会涉及JavaScript对象字面量中的函数。JSON 所基于的 JavaScript 对象字面量单纯指对象字面量及其属性的语法表示。

2.2 名称—值对

在计算机界,名称—值对的概念非常流行。它们也有别的名字,像键—值对、属性—值对或字段—值对等。如果你对名称—值对这一概念已经很熟悉了,那么JSON 看上去也会很亲切。在名称—值对中,你首先要声明一个名称,例如 "animal"。然后把它凑成 一对:一个名称加一个值。我们来给这个名称(本例中的 "animal")一个 值。在JSON 中,名称—值 对的值还可以是数字、布尔值、null、数组或对象。

2.3 正确的JSON语法

名称,也就是我们示例中的 "animal",始终需要被双引号包裹。双引号中的名称可以是任何有效的字符 串,所以你的名称即使看起来像下面这样,在 JSON 中也是完全合法的: "My animal": "cat" 你甚至可以在名称中使用单引号: "Lindsay's animal": "cat" 这是因为,JSON 中的名称—值对是一种对许多系统都十分友好的数据结构,而使用空格和特殊字符(即 a~z、0~9 除外的其他字符)忽略了可移植性。

2.4 语法验证

和机器不同,对我们这些敲键盘的人来说,只要少敲个字就能酿成错误。我们没有创造比想象中更多的错误,真的是很神奇。所以当你在工作中使 用 JSON 时,很重要的一点就是验证。你使用的集成开发环境(integrated development environment,IDE)也许会内置JSON的验证。

2.5 JSON文件

你可能会觉得在今后使用 JSON 时,仅能在代码中创建它并传输到一个仅 可通过开发者工具来查看的不可见的世界。然而,JSON 这种数据交换格 式是可以作为独立的文件存在于文件系统中的。它的文件扩展名非常好 记:.json。因此,我可以将“animal/cat”保存到计算机中的一个 JSON 文件中,比如 C:/animals.json。

2.6 JSON的媒体类型

当你在传递数据时,需要提前告知接收方数据是什么类型,这就会涉及媒 体类型。媒体类型也有一些你可能听过的其他称呼,如“互联网媒体类型”“内容类型”或“MIME 类型”。它使用“类型/子类型”这种格式来表 示,比如你可能见过的text/html。JSON 的 MIME 类型是application/json。

3.1 数据类型简介

在计算机中,我们需要知道正在处理什么类型的数据,因为不同类型的数 据有着不同的操作途径。可以让两个数相乘,但是不能让一个单词和一个数相乘。如果我有一个单词表,可以按字母顺序给它们排序。但是数字5可没有字母顺序。所以在编程中,当一个方法(或函数)说“请给我传递 一个数字”时,如果我们知道什么是数字的话,就不会错把单词“ketchup”传给它。

在计算机科学中,有一种数据类型被称为原始数据类型。这里所指的数据类型可不是像原始人那样粗陋的数据,确切地说,它们指的是数据中最基本的一种类型。

3.2 JSON中的数据类型

虽说对于复合数据类型,乃至于一小部分原始类型来说,它们的编程语言存在许多差异,但我最开始提到的原始类型,大多数语言中都是涵盖的:

  • 数字(如 5 或 5.09):整型、浮点数、定点数
  • 字符和字符串(如“a”“A”或“apple”)
  • 布尔类型(即真或假)

对象数据类型是在大多数编程语言中都很常见且流行的数据类型,如 Java或C#,不过不是全部。数据交换格式是以让不同的两个系统间能够进行交流为目标的,这一格式所表达的必须是共有的部分。复合数据类型对象的数据结构可以被解构为原始数据类型。JSON 中的数据类型包括:

  • 对象
  • 字符串
  • 数字
  • 布尔值
  • null
  • 数组

3.3 JSON中的对象数据类型

JSON 中的对象类型非常简单。追根溯源,JSON 本身就是对象,也就是一个被花括号包裹的名称—值对的列表。如果你希望在作为对象的JSON中创建一个名称—值对,那就需要用到嵌套。

3.4 JSON中的字符串类型

前面我们曾通过“animal/cat”这个示例简单讨论了JSON中的字符串类型:{ "animal" : "cat" }。这里的 "cat" 就是一个字符串类型的值。JSON 中的字符串可以由任何Unicode字符构成,因此上面的例子中的所有字符都是可以使用的。字符串的两边必须被双引号包裹。

3.5 JSON中的数字类型

数字是一种常见的用于传递数据的信息片段。库存数目、金额、经度/纬度以及地球的质量等均可以用数字来表示,JSON中的数字可以是整数、小数、负数或者指数。

3.6 JSON中的布尔类型

在口语中,对问题最简单的回答莫过于肯定或否定。在计算机编程中,布尔类型是很简单的。它不是真就是假。如果你问你 的电脑一个疑问句,它就会回答“真”(true)或 “假”(false)。在一些编程语言中,true的字面值可能用1来表示,false用0来表示。

3.7 JSON中的null类型

对于一无所有的东西,你可能觉得用0来描述比较合适。比如,我有 0 个手表。但事实是,0是一个数字。这意味着本质上是在计数。不要把nullundefined混淆,尤其是在使用 JavaScript 时。在JavaScript中,undefined与那些声明的名称和值都不存在的对象或变量有关,而null则仅与对象或变量的值 有关。null是一个表示“没有值”的值。在 JSON中,null必须使用小写形式。

3.8 JSON中的数组类型

现在探讨一下数组数据类型。如果你对数组不熟悉也没关系,我们先来简单介绍一下。想象一个装着一打鸡蛋的容器。容器里有12个位置用来放鸡蛋。我刚买下这些鸡蛋时,数量是12个。这就相当于有一个大小为12的数组,包含12个鸡蛋。

前三章内容结束。

  • 郑重声明:文章首发于公众号“FunTester”,禁止第三方(腾讯云除外)转载、发表。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.1 JSON是一种数据交换格式
  • 1.2 JSON独立于编程语言
  • 2.1 JSON基于JavaScript对象
  • 2.2 名称—值对
  • 2.3 正确的JSON语法
  • 2.4 语法验证
  • 2.5 JSON文件
  • 2.6 JSON的媒体类型
  • 3.1 数据类型简介
  • 3.2 JSON中的数据类型
  • 3.3 JSON中的对象数据类型
  • 3.4 JSON中的字符串类型
  • 3.5 JSON中的数字类型
  • 3.6 JSON中的布尔类型
  • 3.7 JSON中的null类型
  • 3.8 JSON中的数组类型
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档