js基础-JSON

最新推荐文章于 2022-03-10 10:19:57 发布
front_end_fan 最新推荐文章于 2022-03-10 10:19:57 发布
阅读量352 收藏
点赞数 1
CC 4.0 BY-SA版权
分类专栏: javascript 文章标签: javascript JSON
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.youkuaiyun.com/qq_39198420/article/details/78039876
javascript 专栏收录该内容
74 篇文章
订阅专栏
本文介绍了JSON(JavaScript对象表示法)的基本概念、语法规范及其在JavaScript中的应用。详细讲解了JSON的数据类型、对象与数组的表示方法,并演示了如何利用JSON.stringify()和JSON.parse()进行数据的序列化与解析。

JSON

JSON(JavaScript Object Notation,JavaScript对象表示法),它是JavaScript的一个严格子集。

JSON只是一种简单数据格式,并不是只有JavaScript拥有。

1、语法

JSON对值的类型和格式有严格的规定:

  • 复合类型的值只能是数组或对象,不能是函数、正则表达式对象、日期对象。
  • 简单类型的值只有四种:字符串、数值(必须以十进制表示)、布尔值和null(不能使用NaN, Infinity, -Infinity和undefined)。
  • 字符串必须使用双引号表示,不能使用单引号。
  • 对象的键名必须放在双引号里面。
  • 数组或对象最后一个成员的后面,不能加逗号。

1.1 简单值

最简单的JSON数据形式就是简单值。

5 
"tg"
null
true
false

上面的都是有效的JSON数据。

1.2 对象

JSON中的对象与JavaScript中的对象字面量基本一样,除了JSON中的对象要求对象的属性一定要加上双引号(对象字面量的属性对引号可有可无)。

{ 
name: "tg"
}
{
'name': "tg"
}

上面两个对象对于JSON来说是错误的,正确的写法如下:

{ 
"name": "tg"
}

当然,你可以使用嵌套对象:

{ 
"name": "tg",
"school": {
"name": "tg",
"location": "gz"
}
}

可能你注意到了,上面有两个同名(name)属性,这是没问题的,因为它们属于不同的对象,但是请注意,同一对象内不能出现两个同名属性。

1.3 数组

JSON数组采用的是JavaScript中的数组字面量。

{ 
"color": ["red","blue"]
}

当然,你也可以在数组中放对象,对象中放数组。

2、 解析与序列化

JSON在JavaScript中流行的原因是JSON数据结构可以解析成有用的JavaScript对象。

2.1序列化和反序列化

JSON对象有两个方法:JSON.stingify()和JSON.parse(),分别表示将JavaScript对象序列化为JSON字符串和把JSON字符串解析为原生的JavaScript值。

2.1.1 JSON.stringify()

(1)基本用法

JSON.stringify方法用于将一个Javascript对象序列化为字符串。该字符串应该符合JSON格式,并且可以被JSON.parse方法还原。

注意:在序列化JavaScript对象时,所有函数及原型成员都会被有意忽略,不体现在结果中,而且值为undefined的任何属性也会被跳过,还有正则对象会被转成空对象。,最终返回来的值为有效的JSON格式。

var data = { 
name: 'tg',
age: 1,
books: [ "Javascript", 2],
location:{
name: "gz",
},
test: function(){},
sex: undefined
};
console.log(JSON.stringify(data));
//{"name":"tg","age":1,"books":["Javascript",2],"location":{"name":"gz"}}

在上面的例子中,将data对象转换成JSON字符串,我们可以看到,键名都被双引号括起来了,而对于原始类型的字符串(name: ‘tg’),也由单引号转成了双引号,这是因为将来还原的时候,双引号可以让JavaScript引擎知道,tg是一个字符串,而不是一个变量名。而且test和sex并没有在返回值中,这是因为test是函数,而sex的值是undefined。

(2)过滤结果

JSON.stringify()还可以接受第二个参数,指定需要转成字符串的属性。

当传入的参数是数组时,那么JSON.stringify()的结果中将只包含数组中列出的属性。

例子:

var data = { 
name: 'tg',
age: 1,
books: [ "Javascript", 2],
location:{
name: "gz",
},
test: function(){},
sex: undefined
};
console.log(JSON.stringify(data,["name","books"]));
//{"name":"tg","books":["Javascript",2]}

在上面的例子中,传给JSON.stringify()的第二个参数是一个数组,其中包含两个字符串:“name”和“books”,这两个属性与将要序列化的对象中的属性是对应的,因此在返回的结果字符串中,就只会包含这两个属性(如上结果)。

第二个参数还可以是函数,它接收两个参数:属性(键)名和属性值,返回的值就是相应键的值(它改变了序列化对象的结果)。

属性名只能是字符串,而在值并非键值对的值时,键名可以是空字符串。

var jsonText = JSON.stringify(data,function(key, value){ 
if(key == 'books'){
return value.join(',');
}else{
return value;
}
});
console.log(jsonText);
//{"name":"tg","age":1,"books":"Javascript,2","location":{"name":"gz"}}

在上面的例子中,如果键名为”books”,就将数组连成一个字符串,否则,返回原值。

注意:如果函数返回了undefined,那么相应的属性会被忽略。

(3)字符串缩进

JSON.stringify()方法还可以接收第三个参数,用于控制结果中的缩进和空白符。如果这个参数是数值,那它表示的是每个级别缩进的空格数。比如,要在每个级别缩进4个空格:

var data = { 
name: 'tg',
age: 1,
books: [ "Javascript", 2],
location:{
name: "gz",
},
test: function(){},
sex: undefined
};
console.log(JSON.stringify(data, null, 4));
// 结果
{
"name": "tg",
"age": 1,
"books": [
"Javascript",
2
],
"location": {
"name": "gz"
}
}

当传入有效的控制缩进的参数值时,结果字符串就会自动包含换行符。不过要注意:最大缩进空格数为10,所有大于10的值都会自动转换为10.

如果缩进参数是一个字符串而非数值,则这个字符串将在JSON字符串中被用作缩进字符。

例子:

var data = { 
name: 'tg',
age: 1,
books: [ "Javascript", 2],
location:{
name: "gz",
},
test: function(){},
sex: undefined
};
console.log(JSON.stringify(data, null, 4));
// 结果
{
--"name": "tg",
--"age": 1,
--"books": [
----"Javascript",
----2
--],
--"location": {
----"name": "gz"
--}
}

注意:缩进字符串最长不能超过10个字符长,如果超过了10个,结果中只会显示10个字符。

(4)toJSON()方法

如果JSON.stringify的参数对象有自定义的toJSON方法,那么JSON.stringify会使用这个方法的返回值作为参数,而忽略原对象的其他属性。

var data = { 
name: 'tg',
age: 1,
toJSON:function(){
var data = {
name: this.name
};
return data;
}
};
console.log(JSON.stringify(data));
//{"name":"tg"}

在上面的代码中,我们给data对象定义了一个toJSON()方法,该方法返回name的值。

可以让toJSON()方法返回任何序列化的值。

假设将一个对象传入JSON.stringify(),序列化对象的顺序如下:

  • 如果存在toJSON()方法而且能通过它取得有效的值,则调用该方法,否则,按默认顺序序列化。
  • 如果提供了第二个参数,应用这个函数过滤器。传入函数过滤器的值是第(1)步返回的值
  • 对第(2)步返回的每个值进行相应的序列化
  • 如果提供了第三个参数,执行相应的格式化

2.1.2 JSON.parse()

JSON.parse方法用于将JSON字符串转化成原生的JavaScript对象。

例子:

var jsonText = '{"name":"tg","age":1,"books":["Javascript",2],"location":{"name":"gz"}}'; 
console.log(JSON.parse(jsonText));

//返回对象
{
name: 'tg',
age: 1,
books: [ "Javascript", 2],
location:{
name: "gz",
}
};

如果传入的字符串不是有效的JSON格式,则会报错。

JSON.parse()也可以接收另一个参数,该参数是一个函数,将在每个键值对上调用。

例子:

var jsonText = '{"name":"tg","age":1,"books":["Javascript",2],"location":{"name":"gz"}};

var o =JSON.parse(jsonText,function(key, value){
if(key == "name"){
return "Hello";
}
return value;
});
console.log(o.name);
// Hello

在上面的例子中,在解析时,当遇到键名是“name”时,就将相应的值替换成”Hello”,最终返回的name就是”Hello”。

如果函数返回undefined,则表示要从结果中删除相应的键,如果返回其他值,则将其放入到结果中。

确定要放弃本次机会?
福利倒计时
: :

立减 ¥

普通VIP年卡可用
立即使用
front_end_fan
关注 关注
  • 1
    点赞
  • 踩
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
  • 分享
    复制链接
    分享到 QQ
    分享到新浪微博
    扫一扫
  • 举报
    举报
专栏目录
前后端分离之数据mock
weixin_48115183的博客
05-12 1787
为了做到前后端并行开发,数据mock就成为环境搭建的重要一环 #1.1 Web应用前后端分离 后台向前台提供API接口,只负责数据的提供和计算,而完全不处理展现 前台通过Http(Ajax)请求获取数据, 在浏览器端动态构建界面显示数据 #1.2 利用Node+express提供模拟数据 优点:可以在浏览器端访问 缺点:如果是打包发布就无法访问模拟数据, 只能是测试时使用 修改build/dev-server.js //加载json数据 var apiData = require('..
JSON格式化JS代码,改变
rachelholic的专栏
08-28 1639
要用JSON格式化工具,最强大的是http://json.parser.online.fr/,但是人家只让线上用。 其他的JSON格式化代码还是很多的,就是没人家强大,所以弄个代码,好好改了改。 把原作者的贴上:http://download.youkuaiyun.com/detail/wolf_410/5927367 把下面这些放到一个文件夹里就OK了,剩下的会慢慢改成和json.parser.onl
参与评论 您还未登录,请先 登录 后发表或查看评论
前端---js中JSON语法
Nagile-zhou博客
10-06 603
JSON 语法 JSON 语法是 JavaScript 语法的子集。JSON(JavaScript Object Notation)语法提供了一种更简单的方式来创建对象,使用JSON语法可避免书写函数,也可避免使用new关键字,可以直接穿件一个JavaScript对象.为了创建JavaScript对象,可以使用花括号,然后将每个属性写成"key:value"对的形式. JSON 语法规则 ...
json.js操作json方法
weixin_30765505的博客
08-02 136
JSON对象和JSON字符串之间的相互转换 在数据传输流程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象 JSON字符串: var str1 = '{ "name": "cxh", "sex": "man" }'; JSON对象: var str2 = { "name": "cxh", "sex": ...
JavaScript中this关键字的使用
front_end_fan
09-14 413
相信大家在学习JavaScript的时候,this关键字总是会让大家感到很困惑,下面就来给大家详细的介绍有关this的一些知识点。 this 在JavaScript中this总是指向一个对象,而具体指向的那个对象是在运行代码时基于函数的执行环境动态绑定的,而不是函数在声明时的环境。 this的指向问题 在JavaScript中出去特殊的with和eval之外,具体到实际运用中一般包括以下四种情况:
tooltips-json
03-19
要深入理解和使用"tooltips-json",你需要具备扎实的JavaScript基础,对DOM操作和JSON有深入了解,同时也要熟悉前端开发的基本流程和最佳实践。通过阅读提供的源代码和示例,你将能够学习到如何将JSON数据有效地转化...
hiroi-sora_PaddleOCR-json_1741860124.zip
最新发布
03-14
另外,文件名列表中的“PaddleOCR-json-main”可能是一个包含PaddleOCR和JSON配置文件的主目录或文件夹,而“hiroi-sora_PaddleOCR-json”可能是一个包含特定版本的PaddleOCR JSON配置或数据集的压缩包。这些文件...
JS基础学习笔记-JSON
06-14
JS基础学习笔记-JSON
pomelo-json-data-plugin:Pomelo 的 Json 配置数据插件
06-07
《Pomelo的Json配置数据插件:pomelo-json-data-plugin详解》 在现代的网络游戏开发中,灵活且高效的配置管理是至关重要的。Pomelo框架,作为一款开源的Node.js游戏服务器框架,提供了丰富的插件系统来满足开发者的...
mind-maps-to-json:思维导图到 JSON 数据对象
07-17
《JavaScript实现:思维导图与JSON数据对象的互换》 在信息技术日益发达的今天,思维导图作为一种有效的信息组织工具,被广泛应用于项目管理、学习笔记、问题解决等多个领域。而JSON(JavaScript Object Notation)...
console.log(JSON.stringify(response))
heyuqing32的博客
02-27 2417
console.log(JSON.stringify(response)) 的使用  
浅谈 JSON.stringify 方法
dawuafang
02-02 292
用过 json 的应该都知道,把一个对象通过stringify之后提交给后台或者存储在 Storage 里是很常用的手段。 但是 IE6-8 下没有 JSON 对象,所以要借助json2.js来实现。 今天我们来简单介绍下 stringify 方法的一些正确使用姿势吧。 当然,让高手们贱笑了,本文只是分享一些方法给新手朋友们。 var dat...
JSON.stringify几种可能的用法总结
热门推荐
高山上的鱼
09-10 1万+
$(document).ready(function(){ //如果JS对象含有toJSON方法,那么stringify返回该方法的返回值   //var obj={name:"xxx",sex:'female',toJSON:function(){return "xxx";}};   // alert(JSON.stringify(obj)); //如果stringify提供了第
JSON.stringify(data, null, 4)
weixin_30273501的博客
04-25 1339
JSON.stringify(data, null, 4) JSON.stringify从一个对象解析出字符串,第三个参数是格式化缩进格式按照四个字符缩进 转载于:https://www.cnblogs.com/silences/p/6761568.html...
你真的了解JSON.stringify() 吗???
扫地僧
06-24 2136
<html lang="en"> <head> <meta charset="UTF-8"> <title>JSON.stringify()</title> </head> <body> <!-- --> <script> // 传一个对象,生成JSON字符串 var ob...
JSON.stringify(xx,null,4) 简单的格式对齐
晚星的博客
03-10 1172
var testData = { lannan91:{ Name:"lannan91", Age:91, Id:123456789, Tel:110120119, }, nannal:{ Name:"nannal", Age:19, Id:987654321, Tel:911021011, }, "Guo'degang":{
java json.stringify_浅谈 JSON.stringify 方法
weixin_35414437的博客
02-16 1782
来源于https://www.cnblogs.com/chengxs/p/8656723.html一、前言最近项目中,遇到需要将对象转换成字符串进行传递,上次写过一篇文章关于json字符串转换成json对象,json对象转换成字符串,值转换成字符串,字符串转成值。当时主要是用在有时候处理字符串和json对象之间的转换,写的主要是怎么用,涉及到JSONstringify具体用法没有涉及到,有时候...
JSON.stringify()方法
喜你已久丶不弃的博客
04-08 2659
&lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt; JSON.stringify 方法&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &amp
front_end_fan

博客等级

码龄8年
238
原创
371
点赞
597
收藏
153
粉丝
关注
私信

热门文章

  • js css+html实现简单的日历 33375
  • js监听手机端的touch滑动事件 21524
  • 设置title的样式 18193
  • html5实现贪吃蛇小游戏 17230
  • javascript——touch事件介绍与实例演示 16600

分类专栏

  • ajax
    6篇
  • html5
    17篇
  • CSS3
    16篇
  • javascript
    74篇
  • css
    34篇
  • 纯CSS
    15篇
  • jquery
    35篇
  • vue
    12篇
  • 前端面试题
    4篇
  • 布局
    4篇
  • bootstrap
    6篇
  • 特殊样式
    5篇
  • app
    4篇
  • 日历
    5篇
  • 插件
    13篇
  • 移动端
    13篇
  • 正则表达式
    3篇
  • jquery源码
    14篇
  • 其他
    14篇
  • ES6
    4篇
  • SQL
  • svn
    1篇
  • IOS
    2篇
  • 兼容性
    5篇
  • 分页
  • markdown编辑器
    1篇
  • 图片上传
    1篇
  • 导出
    1篇
  • 导出excel
    1篇
  • 模板引擎
    2篇
  • 计算机基础
  • webpack
    3篇
  • amd/cmd
    1篇
  • promise
    1篇
  • Git
    1篇

展开全部 收起

上一篇:
js基础-正则表达式★★★
下一篇:
js基础-引用类型-Object对象 ★★★☆

最新评论

  • js基础-富文本编辑器

    SixWeChat: 引用「index」 啥意思?

  • 原生js分页效果

    m0_51704076: 如果一页显示5条怎么改?

  • CSS特殊样式(七)CSS3下的纸张效果实现展示

    不考n2不换头像: 太好看了

  • css段落文字(中英文混杂)实现两端对齐

    清川先生: 英文单词是不允许词内换行的

  • js实现前端数据分页

    啦啦啦1326: 详情怎沫查看

大家在看

  • OBS直播教程:OBS美颜插件怎么下载?OBS美颜插件怎么用?
  • 【LeetCode 每日一题】2348. 全 0 子数组的数目
  • 基于STM32单片机的OneNet物联网云平台农业土壤湿度控制系统 470
  • 数字时代下,图片添加水印的重要性不容忽视 427
  • 基于STM32单片机的家庭医护血氧体温血压吃药监测APP系统 691

最新文章

  • vue-cli webpack全局引入jquery、elment-ui
  • 学习webpack
  • 学习git和github
2018年18篇
2017年289篇

目录

展开全部

收起

目录

展开全部

收起

上一篇:
js基础-正则表达式★★★
下一篇:
js基础-引用类型-Object对象 ★★★☆

分类专栏

  • ajax
    6篇
  • html5
    17篇
  • CSS3
    16篇
  • javascript
    74篇
  • css
    34篇
  • 纯CSS
    15篇
  • jquery
    35篇
  • vue
    12篇
  • 前端面试题
    4篇
  • 布局
    4篇
  • bootstrap
    6篇
  • 特殊样式
    5篇
  • app
    4篇
  • 日历
    5篇
  • 插件
    13篇
  • 移动端
    13篇
  • 正则表达式
    3篇
  • jquery源码
    14篇
  • 其他
    14篇
  • ES6
    4篇
  • SQL
  • svn
    1篇
  • IOS
    2篇
  • 兼容性
    5篇
  • 分页
  • markdown编辑器
    1篇
  • 图片上传
    1篇
  • 导出
    1篇
  • 导出excel
    1篇
  • 模板引擎
    2篇
  • 计算机基础
  • webpack
    3篇
  • amd/cmd
    1篇
  • promise
    1篇
  • Git
    1篇

展开全部 收起

目录

评论
被折叠的  条评论 为什么被折叠? 到【灌水乐园】发言
查看更多评论
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值