相关文章推荐
英俊的书签  ·  Chrome Headless模式 - ...·  1 年前    · 
霸气的蘑菇  ·  Linux C gethostname, ...·  1 年前    · 
不爱学习的火腿肠  ·  c/c++ ...·  1 年前    · 
Json基础教程,0基础入门

Json基础教程,0基础入门

简述:

JSON 全称“JavaScript Object Notation”,译为“JavaScript 对象简谱”或“JavaScript 对象表示法”,是一种轻量级的、基于文本的、开放的数据交换格式,在 Web 开发领域有着举足轻重的地位,如果您想在 Web 开发领域大展身手的话,就必须了解 JSON。

JSON 是基于 JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集,是一种开放的、轻量级的数据交换格式,采用独立于编程语言的文本格式来存储和表示数据,易于程序员阅读与编写,同时也易于计算机解析和生成,通常用于在 Web 客户端(浏览器)与 Web 服务器端之间传递数据。

在 JSON 中,使用以下两种方式来表示数据:

  • Object(对象):键/值对(名称/值)的集合,使用花括号{ }定义。在每个键/值对中,以键开头,后跟一个冒号:,最后是值。多个键/值对之间使用逗号,分隔。
  • Array(数组):值的有序集合,使用方括号[ ]定义,数组中每个值之间使用逗号,进行分隔。
{
        "name":"Penguin",
        "sex":"sperMax",
        "Tutorial":"Json",
        "Evaluate" : [
               "lova life",
               "be eager to help people",
               "grinning all the time"
}

为什么使用Json:

之所以使用 JSON,最主要的原因是 JavaScript。众所周知,JavaScript 是 Web 开发中不可或缺的技术之一,而 JSON 是基于 JavaScript 的一个子集,JavaScript 默认就支持 JSON,而且只要您学会了 JavaScript,就可以轻松地使用 JSON,不需要学习额外的知识。 另一个原因是 JSON 比 XML 的可读性更高,而且 JSON 更加简洁,更容易理解。

与 XML 相比,JSON 具有以下优点:

  • 结构简单、紧凑:与 XML 相比,JSON 遵循简单、紧凑的风格,有利于程序员编辑和阅读,而 XML 相对比较复杂;
  • 更快:JSON 的解析速度比 XML 更快(因为 XML 与 HTML 很像,在解析大型 XML 文件时需要消耗额外的内存),存储同样的数据,JSON 格式所占的存储空间更小;
  • 可读性高:JSON 的结构有利于程序员阅读。

Json的不足:

任何事物都不可能十全十美,JSON 也不例外,比如:

  • 只有一种数字类型:JSON 中只支持 IEEE-754 双精度浮点格式,因此您无法使用 JSON 来存储许多编程语言中多样化的数字类型;
  • 没有日期类型:在 JSON 中您只能通过日期的字符串(例如:1970-01-01)或者时间戳(例如:1632366361)来表示日期;
  • 没有注释:在 JSON 中无法添加注释;
  • 冗长:虽然 JSON 比 XML 更加简洁,但它并不是最简洁的数据交换格式,对于数据量庞大或用途特殊的服务,您需要使用更加高效的数据格式。

Json的存储:

JSON 数据可以存储在 .json 格式的文件中(与 .txt 格式类似,都属于纯文本文件),也可以将 JSON 数据以字符串的形式存储在数据库、Cookie、Session 中。

要使用存储好的 JSON 数据也非常简单,不同的编程语言中提供了不同的方法来检索和解析 JSON 数据,例如 JavaScript 中的 JSON.parse() 和 JSON.stringify()、PHP 中的 json_decode() 和 json_encode()。

Jsonp是什么:

JSONP 不是一门编程语言,也不是什么特别的技术,它更像一个漏洞,程序员可以利用这个漏洞,实现跨域(可以简单理解为跨域名)传输数据。

通过 JSONP,您可以避开浏览器的同源策略,进行跨域请求。JSONP 是利用 HTML 标签的 src 属性引用资源不受同源策影响的特性来实现的,实现步骤如下:

  • 在请求地址中拼接一个回调函数,得到一个新的地址,将这个新地址赋值给 <script> 标签的 src 属性;
  • 服务器接收这个回调函数,并向函数中注入参数,然后以字符串的形式返回这个函数以及其中的参数;
  • <script> 在接收到返回内容后,会将内容当作是一段 JavaScript 代码,自动执行。

JSON 中的值

JSON 中的值可以是以下数据类型:

  • 数字(整数或浮点数);
  • 字符串(需要在双引号中定义);
  • 布尔值(true 或 false);
  • 数组(在方括号中定义);
  • 对象(在花括号中定义);
  • null(空)。
{
        "number":13,
        "float":13.14,
        "string":"Hello Json!",
        "bool":true,
        "array":[
               "student",
               {"name":"Jon","age":18},
               {"name":"Rose","age":19}
        "object" : {
                       "name":"Anna",
                       "age":"19",
                       "sex":"woman"
}

在使用 JSON 时,有以下几点需要注意:

  • JSON 是一段包裹在花括号中的数据,数据由若干 键/值 对组成;
  • 键和值之间使用冒号分隔;
  • 不同的键/值对之间使用逗号分隔;
  • 键需要以字符串的形式定义(即使用双引号包裹,注意:不能使用单引号);
  • 值可以是数字、字符串、布尔值、数组、对象、null;
  • 键必须是唯一的,不能重复,否则 后定义的键/值对会覆盖前面定义的键/值对
  • JSON 中不可以使用八进制或十六进制表示数字。

JSON 中支持的数据类型可以分为简单数据类型和复杂数据类型两种,其中简单数据类型包括:string(字符串)、number(数字)、boolean(布尔值)和 null(空);复杂数据类型包括:Array(数组)和 Object(对象)。

1.字符串

Json中的字符串需要使用双引号定义(不能使用单引号),字符串中可以包含零个或多个Unicode字符。并且,Json的字符串中也可以包含一些转义字符

统一码(Unicode),也叫万国码、单一码,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。
 Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的 二进制编码 ,
以满足跨语言、跨平台进行文本转换、处理的要求。
  • \\反斜线本身;
  • \/正斜线;
  • \"双引号
  • \b退格;
  • \f换页;
  • \n换行;
  • \r回车;
  • \t水平制表符;
  • \u四位的十六进制数字。

2.数字

JSON 中不区分整型和浮点型,只支持使用 IEEE-754 双精度浮点格式来定义数字。此外,JSON 中不能使用八进制和十六进制表示数字,但可以使用 e 或 E 来表示 10 的指数。

        {
               "number1":210,
               "number2":-210,
               "number3":21.05,
               "nummber4":4.0E+2
        }

3.布尔值

Json中的布尔值与javaScript/PHP/java等编程语言中相似,分别为true和false

        {
               "SUCCESS":true,
               "defeat":false
        }

4.空

null是Json中的一个特殊值,表示没有任何值,当Json中的某些键没有具体值时,就可以将其设置为null

        {
               "object" : {
                       "name":"Anna",
                       "age" : "19",
                       "sex" : "woman"
        }

5.对象:

Json 中,对象由花括号{ }以及其中的若干键/值对组成,一个对象中可以包含零个或多个键/值对,每个键/值对之间需要使用逗号,分隔

        {
               "object" : {
                       "name":"Anna",
                       "age" : "19",
                       "sex" : "woman"
        }

6.数组

Json 中,数组由方括号[ ]和其中的若干值组成,值可以是 JSON 中支持的任意类型,每个值之间使用逗号,进行分隔,

        {
               "array": [
                       "student",
                       { "name":"Jon","age" : 18 },
                       { "name":"Rose","age" : 19 }
        }

Json对象

在 JSON 中,对象是一个无序的、键/值对的集合,一个对象以左花括号{开始,以右花括号}结束,左右花括号之间为对象中的若干键/值对。键/值对中,键必须是字符串类型(即使用双引号将键包裹起来),而值可以是 JSON 中的任意类型,键和值之间需要使用冒号:分隔开,不同的键/值对之间需要使用逗号,分隔开。

        {
               "perple" : {
                       "name":"Anna",
                       "age" : "19",
                       "sex" : "woman"
        }

在 JSON 中使用对象类型时,有以下几点需要注意:

  • 对象必须包裹在花括号{ }中;
  • 对象中的内容需要以键/值对的形式编写;
  • 键必须是字符串类型,即使用双引号" "将键包裹起来;
  • 值可以是任意 JSON 中支持的数据类型(例如字符串、数字、对象、数组、布尔值、null 等);
  • 键和值之间使用冒号进行分隔;
  • 不同键/值对之间使用逗号进行分隔;
  • 对象中的最后一个键/值对末尾不需要添加逗号。
        {
               "name":"Penguin",
               "age":20,
               "sex":"man",
               "introduce" : {
                       "know":"good luck",
                       "Evaluate" : [
                              "lova life",
                              "be eager to help people",
                              "grinning all the time"               // 这个地方不能添加逗号,因为它是数组中最后一个值
                       ]       // 这个地方不能添加逗号,因为它是数组中最后一个值
               }        // 这个地方不能添加逗号,因为它也是数组中最后一个值
        }

Json数组

数组是值的有序集合,需要使用方括号[ ]定义,方括号中为数组中的若干值,值可以是 JSON 中支持的任意类型 (例如字符串、数字、布尔值、对象、数组等),每个值之间使用逗号,分隔开

{
    "array":[
           "name":"Penguin",
           "age":20,
           "sex":"man",
            "JSON是什么?",
            "JSON语法规则",
            "JSON数据类型"