zoukankan      html  css  js  c++  java
  • JSON基础

    本文整理自《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 中的名称—值对是一种对许多系统都十分友好的数据结构,而使用空格和特殊字符(即 az、09 除外的其他字符)忽略了可移植性。

    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个鸡蛋。

    有需要PDF的同学可以添加微信:


    • 郑重声明:文章首发于公众号“FunTester”,禁止第三方(腾讯云除外)转载、发表。

    技术类文章精选

    非技术文章精选

  • 相关阅读:
    排序算法之直接插入排序
    排序算法之快速排序
    进程内存空间
    python基础13 ---函数模块3(正则表达式)
    python基础12 ---函数模块2
    python基础11 ---函数模块1
    python基础10 ---匿名函数和递归
    python基础9 -----python内置函数2
    python基础8 -----迭代器和生成器
    python基础7 ---python函数
  • 原文地址:https://www.cnblogs.com/FunTester/p/12245075.html
Copyright © 2011-2022 走看看