分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

JSON

发布时间:2023-09-06 02:04责任编辑:顾先生关键词:暂无标签

JSON是JavaScript Object Notation的缩写,它是一种数据交换格式。

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

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

道格拉斯同学长期担任雅虎的高级架构师,自然钟情于JavaScript。他设计的JSON实际上是JavaScript的一个子集。在JSON中,一共就这么几种数据类型:

  • number:和JavaScript的number完全一致;
  • boolean:就是JavaScript的truefalse
  • 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中直接使用这个对象了。

序列化

让我们先把小明这个对象序列化成JSON格式的字符串:

‘use strict‘;var xiaoming = { ???name: ‘小明‘, ???age: 14, ???gender: true, ???height: 1.65, ???grade: null, ???‘middle-school‘: ‘\"W3C\" Middle School‘, ???skills: [‘JavaScript‘, ‘Java‘, ‘Python‘, ‘Lisp‘]};
{"name":"小明","age":14,"gender":true,"height":1.65,"grade":null,"middle-school":"\"W3C\" Middle School","skills":["JavaScript","Java","Python","Lisp"]}

要输出得好看一些,可以加上参数,按缩进输出:

JSON.stringify(xiaoming, null, ‘ ?‘);

结果:

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

第二个参数用于控制如何筛选对象的键值,如果我们只想输出指定的属性,可以传入Array

JSON.stringify(xiaoming, [‘name‘, ‘skills‘], ‘ ?‘);

结果:

{ ?"name": "小明", ?"skills": [ ???"JavaScript", ???"Java", ???"Python", ???"Lisp" ?]}

还可以传入一个函数,这样对象的每个键值对都会被函数先处理:

function convert(key, value) { ???if (typeof value === ‘string‘) { ???????return value.toUpperCase(); ???} ???return value;}JSON.stringify(xiaoming, convert, ‘ ?‘);

上面的代码把所有属性值都变成大写:

{ ?"name": "小明", ?"age": 14, ?"gender": true, ?"height": 1.65, ?"grade": null, ?"middle-school": "\"W3C\" MIDDLE SCHOOL", ?"skills": [ ???"JAVASCRIPT", ???"JAVA", ???"PYTHON", ???"LISP" ?]}

如果我们还想要精确控制如何序列化小明,可以给xiaoming定义一个toJSON()的方法,直接返回JSON应该序列化的数据:

var xiaoming = { ???name: ‘小明‘, ???age: 14, ???gender: true, ???height: 1.65, ???grade: null, ???‘middle-school‘: ‘\"W3C\" Middle School‘, ???skills: [‘JavaScript‘, ‘Java‘, ‘Python‘, ‘Lisp‘], ???toJSON: function () { ???????return { // 只输出name和age,并且改变了key: ???????????‘Name‘: this.name, ???????????‘Age‘: this.age ???????}; ???}};JSON.stringify(xiaoming); // ‘{"Name":"小明","Age":14}‘

反序列化

拿到一个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‘); // trueJSON.parse(‘123.45‘); // 123.45

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

‘use strict‘;
{"name":"小明同学","age":14}

在JavaScript中使用JSON,就是这么简单!

https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001434499490767fe5a0e31e17e44b69dcd1196f7ec6fc6000

JSON

原文地址:https://www.cnblogs.com/Longhua-0/p/9311804.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved