一.JSON的简介

1.什么是JSON

JSON 英文全称 JavaScript Object Notation

JSON 是一种轻量级的数据交换格式。

JSON是独立的语言 *

JSON 易于理解。

2.json的起源

在JSON出现之前,大家一直用XML来传递数据。因为XML是一种纯文本格式,所以它适合在网络上交换数据。XML本身不算复杂,但是,加上DTD、XSD、XPath、XSLT等一大堆复杂的规范以后,任何正常的软件开发人员碰到XML都会感觉头大了,最后大家发现,即使你努力钻研几个月,也未必搞得清楚XML的规范。

终于,在2002年的一天,道格拉斯·克罗克福特(Douglas Crockford)同学为了拯救深陷水深火热同时又被某几个巨型软件企业长期愚弄的软件工程师,发明了JSON这种超轻量级的数据交换格式。

道格拉斯同学长期担任雅虎的高级架构师,自然钟情于JavaScript。他设计的JSON实际上是JavaScript的一个子集。

3.json的数据类型及表示

number:和JavaScript的number完全一致;

boolean:就是JavaScript的true或false;

string:就是JavaScript的string;

null:就是JavaScript的null;

array:就是JavaScript的Array表示方式——[];

object:就是JavaScript的{ ... }表示方式。

以及上面的任意组合。

并且,JSON还定死了字符集必须是UTF-8,表示多语言就没有问题了。为了统一解析,JSON的字符串规定必须用双引号"",Object的键也必须用双引号""。

由于JSON非常简单,很快就风靡Web世界,并且成为ECMA标准。几乎所有编程语言都有解析JSON的库,而在JavaScript中,我们可以直接使用JSON,因为JavaScript内置了JSON的解析。

把任何JavaScript对象变成JSON,就是把这个对象序列化成一个JSON格式的字符串,这样才能够通过网络传递给其他计算机。

如果我们收到一个JSON格式的字符串,只需要把它反序列化成一个JavaScript对象,就可以在JavaScript中直接使用这个对象了。

(1)JSON 数字

JSON 数字可以是整型或者浮点型:

{ "age":30 }

(2)JSON 布尔值

JSON 布尔值可以是 true 或者 false:

{ "flag":true }

(3)JSON string

JSON的数据可以是字符串类型

{ "name":"hsz" }

(4)JSON null

JSON 可以设置 null 值:

{ "sex":null }

(5)JSON 数组

JSON 数组在中括号中书写:

数组可包含多个对象:

var JSONArray= { "personinfo":[

{"name":"hsz",}

{"age": 25, }

{"slogan":"学就是了!"}

]

};

(6)JSON 对象

JSON 对象在大括号({})中书写:

对象可以包含多个名称/值对:(类似于python的字典)

{ "name":"hsz" , "url":"https://home.cnblogs.com/u/hszstudypy/" }

二.JOSN 对象 与JSON 数组介绍

1.JSON对象

(1)对象语法

{ "name":"hsz", "alexa":10000, "site":null }

JSON 对象使用在大括号({})中书写。

对象可以包含多个 key/value(键/值)对。

key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)。

key 和 value 中使用冒号(:)分割。

每个 key/value 对使用逗号(,)分割。

(2)访问对象值

你可以使用点号(.)来访问对象的值:

例:

<body>

<p>你可以使用点号(.)来访问 JSON 对象的值:</p>

<p id="demo"></p>

<script>

var myObj, x;

myObj = { "name":"hsz", "alexa":10000, "site":"www.hsz.com" };

x = myObj.site;

document.getElementById("demo").innerHTML = x;

</script>

</body>

(3)嵌套 JSON 对象

例:

<body>

<p>访问 JSON 内嵌对象。</p>

<p id="demo"></p>

<script>

myObj = {

"name":"hsz",

"alexa":10000,

"sites": {

"site1":"www.hsz.com",

"site2":"one.hsz.com",

"site3":"two.hsz.com"

}

}

document.getElementById("demo").innerHTML += myObj.sites.site2 + "<br>";

// 或者

document.getElementById("demo").innerHTML += myObj.sites["site2"];

</script>

</body>

(4)修改值

你可以使用点号(.)来修改 JSON 对象的值:

<body>

<p>修改 JSON 对象的值。</p>

<p id="demo"></p>

<p id="demo1"></p>

<p id="demo2"></p>

<script>

var myObj, i, x = "";

myObj = {

"name":"hsz",

"alexa":10000,

"sites": {

"site1":"www.hsz.com",

"site2":"one.hsz.com",

"site3":"two.hsz.com"

}

}

document.getElementById("demo").innerHTML += myObj.sites["site2"];

myObj.sites.site1 = "www.google.com";

for (i in myObj.sites) {

x += myObj.sites[i] + "<br>";

}

document.getElementById("demo1").innerHTML = myObj.name;

document.getElementById("demo2").innerHTML = myObj.sites.site1;

</script>

</body>

(5)删除 JSON 对象的属性

我们可以使用 delete 关键字来删除 JSON 对象的属性:

delete myObj.sites.site1;

delete myObj.sites["site1"]

例:

<body>

<p>删除 JSON 对象属性。</p>

<p id="demo"></p>

<script>

var myObj, i, x = "";

myObj = {

"name":"hsz",

"alexa":10000,

"sites": {

"site1":"www.hsz.com",

"site2":"one.hsz.com",

"site3":"two.hsz.com"

}

}

delete myObj.sites.site1;

for (i in myObj.sites) {

x += myObj.sites[i] + "<br>";

}

document.getElementById("demo").innerHTML = x;

</script>

(6)JavaScript 创建 JSON 对象

例:

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>菜鸟教程(runoob.com)</title>

</head>

<body>

<h2>JavaScript 创建 JSON 对象</h2>

<p>

网站名称: <span id="jname"></span><br />

网站地址: <span id="jurl"></span><br />

网站 slogan: <span id="jslogan"></span><br />

</p>

<script>

var JSONObject= {

"name":"hsz",

"url":"https://home.cnblogs.com/u/hszstudypy/",

"slogan":"学就是了!"

};

document.getElementById("jname").innerHTML=JSONObject.name

document.getElementById("jurl").innerHTML=JSONObject.url

document.getElementById("jslogan").innerHTML=JSONObject.slogan

</script>

</body>

</html>

2.JSON 数组

(1)数组作为 JSON 对象

[ "Google", "baidu", "taobao" ]

JSON 数组在中括号中书写。

JSON 中数组值必须是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)。

JavaScript 中,数组值可以是以上的 JSON 数据类型,也可以是 JavaScript 的表达式,包括函数,日期,及 undefined。

(2)JSON 对象中的数组

对象属性的值可以是一个数组:

var myObj

myObj = {

"person":"人",

"num":3,

"name":[ "zero", "one", "two" ]

}

我们可以使用索引值来访问数组:

myObj.sites[1]

// 值为one

(3)循环数组

你可以使用 for-in 来访问数组:

例:

<body>

<p id="demo"></p>

<script>

var myObj, i, x = "";

myObj = {

"person":"人",

"num":3,

"name":[ "zero", "one", "two" ]

};

for (i in myObj.name) {

x += myObj.name[i] + "<br>";

}

document.getElementById("demo").innerHTML = x;

</script>

</body>

(4)嵌套 JSON 对象中的数组

JSON 对象中数组可以包含另外一个数组,或者另外一个 JSON 对象:

例:

<body>

<p id="demo"></p>

<script>

var myObj, i, j, x = "";

myObj = {

"name":"个人数据",

"num":3,

"person": [

{ "name":"one", "info":[ 24, "男", "翻译官" ] },

{ "name":"two", "info":[ 20, "女", "学生" ] },

{ "name":"three", "info":[ 25, "男" ] }

]

}

document.getElementById("demo").innerHTML = myObj.person[0].info[2];

</script>

(5)修改数组值

你可以使用索引值来修改数组值:

例:

将(4)中的:

document.getElementById("demo").innerHTML = myObj.person[0].info[2];

改为:

myObj.person[0].info[2] = "软件开发工程师"

document.getElementById("demo").innerHTML = myObj.person[0].info;

(运行后可以知道,职业被修改了)

(6)删除数组元素

我们可以使用 delete 关键字来删除数组元素:

将(4)中的:

document.getElementById("demo").innerHTML = myObj.person[0].info[2];

改为:

delete myObj.person[0].info[1];

document.getElementById("demo").innerHTML = myObj.person[0].info;

(运行后可以知道,性别参数被删除)

三.JSON 序列化与返序列化

1.序列化 JSON.stringify(序列化数据);

JSON 通常用于与服务端交换数据。

在向服务器发送数据时一般是字符串。

我们可以使用 JSON.stringify() 方法将 JavaScript 对象转换为字符串。

例:

var xiaoming = {

name: '小明',

age: 14,

gender: true,

height: 1.65,

grade: null,

'middle-school': '\"W3C\" Middle School',

skills: ['JavaScript', 'Java', 'Python', 'Lisp']

};

var s = JSON.stringify(xiaoming);

console.log(s);

输出结果为:

{"name":"小明","age":14,"gender":true,"height":1.65,"grade":null,"middle-school":"\"W3C\" Middle School","skills":["JavaScript","Java","Python","Lisp"]}

注意这个结果的类型是字符串。

2.反序列化 JSON.parse(反序列化数据);

拿到一个JSON格式的字符串,我们直接用JSON.parse()把它变成一个JavaScript对象:

JSON.parse('[1,2,3,true]'); // [1, 2, 3, true]

JSON.parse('{"name":"小明","age":14}'); // Object {name: '小明', age: 14}

JSON.parse('true'); // true

JSON.parse('123.45'); // 123.45

JSON.parse()还可以接收一个函数,用来转换解析出的属性:

例:

var obj = JSON.parse('{"name":"小明","age":14}', function (key, value) {

if (key === 'name') {

return value + '同学';

}

return value;

});

console.log(JSON.stringify(obj)); // {name: '小明同学', age: 14}

前端学习 之 JavaScript 之 JSON的更多相关文章

  1. 前端学习之——js解析json数组

    ** 前端学习之——js解析json数组** 解析json数组即对JSONArray的遍历 一.对于标准的json数组如: var result=[{"flag":1," ...

  2. 前端学习 之 JavaScript基础

    一. JavaScript简介 1. JavaScript的历史背景介绍 1994年,网景公司(Netscape)发布了Navigator浏览器0.9版.这是历史上第一个比较成熟的网络浏览器,轰动一时 ...

  3. web前端学习:JavaScript学习指南

    JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果.通常JavaScript脚本是通过嵌入在HTML中来实现 ...

  4. 前端学习之JavaScript

    JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.(客户端执行的语言) Net ...

  5. 前端学习之-- JavaScript

    JavaScript笔记 参考:http://www.cnblogs.com/wupeiqi/articles/5602773.html javaScript是一门独立的语言,游览器都具有js解释器 ...

  6. 前端学习笔记-JavaScript

    js引入方式: 1.嵌入js的方式:直接在页内的script标签内书写js功能代码. <script type="text/javascript">alert('hel ...

  7. web前端学习(二) javascript对象和原型继承

    目录 1. JavaScrpt对象 2. 原型对象和继承 3. 对象的克隆 (1)javascript对象 在JS中,对象是属性的容器.对于单个对象来说,都由属性名和属性值构成:其中属性名需要是标识符 ...

  8. 【前端学习】javascript面向对象编程(继承和复用)

    前言       继承,代码复用的一种模式.和其它高级程序语言相比,javascript有点点不一样,它是一门纯面向对象的语言,在JS中,没有类的概念,但也可以通过原型(prototype)来模拟对象 ...

  9. 前端学习之JavaScript中的 NaN 与 isNaN

    NaN NaN 即 Not a Number ,不是一个数字. 在 JavaScript 中,整数和浮点数都统称为 Number 类型 .除此之外,Number 类型还有一个很特殊的值,即 NaN . ...

随机推荐

  1. 前端知识之html

    html介绍 web服务器的本质 import socket sk=socket.socket() sk.bind(('127.0.0.1'.8080)) sk.listen(5) while Tru ...

  2. Navicat Premium破解

    1.正常下载安装 2.把PatchNavicat.exe文件放到Navicat安装目录下 3.以管理员身份启动PatchNavicat.exe 4.运行Navicat即可

  3. Codeforces Round #624 (Div. 3) C. Perform the Combo(前缀和)

    You want to perform the combo on your opponent in one popular fighting game. The combo is the string ...

  4. Python 多任务(进程) day1(1)

    进程和程序的关系: 通俗来讲程序是死的不变的,进程是活的改变的.一个程序在没运行之前是程序,运行之后是进程 程序是一种电脑能识别的2进制代码,当你一直运行程序的时候,会出现多个进程(相当于菜谱和菜,照 ...

  5. 前端——语言——Core JS——《The good part》读书笔记——第八章节(Methods)

    本章介绍JS核心对象的方法.这些对象包括Array,Function,Number,Object,RegExp,String.除这些常用的核心对象还有Date,JSON. 本章更偏向于API文档,介绍 ...

  6. MySQL中 IS NULL、IS NOT NULL、!= 能用上索引吗?

    看面试题的时候,总能看到MySQL在什么情况下用不上索引,如下: MySQL的WHERE子句中包含 IS NULL.IS NOT NULL.!= 这些条件时便不能使用索引查询,只能使用全表扫描. 不耽 ...

  7. 【Vue组件系统】

    目录 全局组件 局部组件 注册 子组件的用法 父子组件的通讯 子父组件的通讯 非父子组件的通讯 混入 插槽 具名插槽 使用组件的注意事项 使用组件实现导航栏 "vue.js既然是框架,那就不 ...

  8. Ubuntu18.04安装Vim-plug与YCM

    由于个人强迫症的原因,之前的ycm是通过vundle来管理的,这次想更新一下ycm发现问题太多,于是就重新装了个Ubuntu虚拟机,用vim-plug来进行管理ycm及其他插件. 首先要换一下Ubun ...

  9. Python格式化字符串知多少

    字符串格式化相当于字符串模板.也就是说,如果一个字符串有一部分是固定的,而另一部分是动态变化的,那么就可以将固定的部分做成模板,然后那些动态变化的部分使用字符串格式化操作符(%) 替换.如一句问候语: ...

  10. windows10下VS2013搭建opencv2.4.9吐血之作

    1.下载opencv2.4.9.exe文件,然后双击extract文件到指定目录 2.按此链接安装opencv:https://www.cnblogs.com/cuteshongshong/p/405 ...