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数据类型"