JSON.stringify() / JSON.parse() / JSON 真是个好东西

news2024/10/6 2:21:49

目录

1. JSON 基本概念

1.1 JavaScript 对象表示法

1.2 JSON 文件

1.3 JSON 语法

2. XML VS JSON

2.1 共同点

2.2 不同点

2.3 使用步骤对比

3. JSON.parse()

3.1 使用介绍

3.2 使用 reviver 参数,将 JSON 对象解析出来的 string 转化为 Date

4. JSON.stringify()

4.1 使用介绍

4.2 replacer 参数示例

4.2.1 replacer 是函数 —— 序列化 部分 传入的对象

4.2.2 replacer 是函数 —— 序列化 部分 传入的数组

4.2.3 replacer 是数组 —— 序列化数组中指定的键值

4.3 space 参数示例

4.4 需要注意的点

4.4.1 转换的值如果存在 toJSON(),则仅执行 toJSON()

4.4.2 JSON.stringify() 会把 Date() 序列化为 时间戳 字符串

4.4.3 只能序列化可枚举属性,不可枚举的属性会被忽略

4.4.4 Symbol 无法序列化

5. JSONP

5.1 什么是 JSONP

5.2 JSONP 原理分析及使用


1. JSON 基本概念

1.1 JavaScript 对象表示法

JSON —— JavaScript Object Notation 【JavaScript 对象表示法】

JSON 使用 Javascript 语法来描述数据对象,但 JSON 被多种编程语言支持,它独立于语言

1.2 JSON 文件

JSON 文件的文件类型是 .json

JSON 文本的 MIME 类型是 application/json

1.3 JSON 语法

JSON 的值可以是:

  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 布尔值(true / false)
  • 数组(在中括号中)
  • 对象(在大括号中)
  • null

举个栗子~

// JSON 数字
{ "age": 30 }

// JSON 对象
{ key1 : value1, ... keyN : valueN }

// JSON 数组
{
    "pollutions": [
        { "name":"miaomiao" , "url":"www.miaomiao.com" }, 
        { "name":"google" , "url":"www.google.com" },
    ]
}

// JSON 布尔值
{ "flag": true }

// JSON null
{ "runoob": null }

JSON 在线解析 | 菜鸟工具JSON 在线解析是一款 JSON 格式化工具,你可以在线验证、编辑和格式化 JSON 数据,格式化后的 JSON 数据以树形结构展示,更易于阅读,此外还可以将 JSON 转换为 XML、YAML、CSV格式。..https://c.runoob.com/front-end/53/ 

 

2. XML VS JSON

2.1 共同点

JSON 和 XML 都用于 —— 接收 web 服务端的数据

// JSON
{
    "pollutions": [
        { "name":"miaomiao" , "url":"www.miaomiao.com" }, 
    ]
}

// XML
<sites>
  <site>
    <name>miaomiao</name> <url>www.miaomiao.com</url>
  </site>
</sites>
  • JSON 和 XML 数据都是 "自我描述" ,都易于理解
  • JSON 和 XML 数据都是有层次的结构
  • JSON 和 XML 数据可以被大多数编程语言使用

 

2.2 不同点

  • JSON 不需要结束标签
  • JSON 更加简短
  • JSON 读写速度更快
  • JSON 可以使用数组

最重要的不同:XML 需要使用 XML 解析器来解析,JSON 可以使用标准的 JavaScript 函数来解析

  • JSON.parse(): 将 JSON 字符串 转换为 JavaScript 对象
  • JSON.stringify(): 将 JavaScript 转换为 JSON 字符串

2.3 使用步骤对比

使用 XML 的步骤:

  • 读取 XML 文档
  • 使用 XML DOM 来循环遍历文档
  • 读取值并存储在变量中

使用 JSON 的步骤:

  • 读取 JSON 字符串
  • 用 eval() 处理 JSON 字符串

所以,使用 JSON 更方便

3. JSON.parse()

3.1 使用介绍

服务器返回的数据,一般是字符串,可以使用 JSON.parse() 方法将数据转换为 JavaScript 对象

JSON.parse(text[, reviver])

text:必需, 一个有效的 JSON 字符串
reviver:可选,一个转换结果的函数, 将为对象的每个成员调用此函数

3.2 使用 reviver 参数,将 JSON 对象解析出来的 string 转化为 Date

JSON 不能存储 Date() 对象,可以利用 JSON.parse() 的第二个参数,对转换的数据进行处理

举个栗子~

var text = '{ "name":"miaomiao", "initDate":"2013-12-14", "site":"www.miaomiao.com"}';

var obj = JSON.parse(text, function (key, value) {
  if (key == "initDate") {
    return new Date(value);
  } else {
    return value;
  }
});

console.log(obj)

 

4. JSON.stringify()

4.1 使用介绍

向服务器发送的数据,一般是字符串,可以使用 JSON.stringify() 方法将转换为字符串

JSON.stringify(value[, replacer[, space]])

value:必需。 要转换的 JavaScript 值(通常为对象或数组)
replacer:可选。用于转换结果的函数或数组

  • 如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回 undefined,则排除成员。根对象的键是一个空字符串:""。如果该参数为未提供或者null ,则对象所有的属性都会被序列化
  • 如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。当 value 参数也为数组时,将忽略 replacer 数组

space:可选。文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space 大于 10,则文本缩进 10 个空格。space 也可以使用非数字,如:\t
 

4.2 replacer 参数示例

4.2.1 replacer 是函数 —— 序列化 部分 传入的对象

若 replacer 函数返回 undefined 或者函数,则值会被忽略

/**
 * 序列化回调方法
 * @param {*} key 键名
 * @param {*} value 键值
 * @returns 
 */
function replacer(key, value) {
  // 如果键值为字符串格式,则不进行序列化(输出结果不带当前键值对)
  if (typeof value === "string") {
    return undefined;
  }
  return value;
}
const userInfo = {
  name: 'miaomiao',
  age: 23,
  sex: '女'
}
console.log(JSON.stringify(userInfo, replacer));

 

 

4.2.2 replacer 是函数 —— 序列化 部分 传入的数组

若 replacer 函数返回 undefined ,当前值不会被忽略,而将会被 null 取代

/**
 * 序列化回调方法
 * @param {*} key 键名
 * @param {*} value 键值
 * @returns 
 */
function replacer(key, value) {
  // 如果值为字符串格式,则序列化返回 null
  if (typeof value === "string") {
    return undefined;
  }
  return value;
}

const foodList = ['苹果', 666, '香蕉', 888]

console.log(JSON.stringify(foodList, replacer));

 

 

4.2.3 replacer 是数组 —— 序列化数组中指定的键值

转换数组中 具有键值 的成员

const userInfo = {
  name: 'miaomiao',
  age: 23,
  sex: '女'
}

console.log(JSON.stringify(userInfo, ['name', 'age']));

 

4.3 space 参数示例

为了便于阅读 JSON 数据,将每一级数据赋予不同的缩进

const userInfo = {
  name: 'miaomiao',
  age: 23,
  hobby: [{
    label: '第五人格',
    value: 'dwrg',
  }, {
    label: '双人成行',
    value: 'srcx',
  }]
}
console.log(JSON.stringify(userInfo, null, 6));

 

4.4 需要注意的点

4.4.1 转换的值如果存在 toJSON(),则仅执行 toJSON()

const userInfo = {
  name: 'miaomiao',
  age: 23,
  toJSON() {
    console.log('禁止转换我')
  }
}
console.log(JSON.stringify(userInfo));

 

4.4.2 JSON.stringify() 会把 Date() 序列化为 时间戳 字符串

console.log(JSON.stringify(new Date()));

4.4.3 只能序列化可枚举属性,不可枚举的属性会被忽略

const userInfo = {}

Object.defineProperty(userInfo, "home", {
  adrress: '北京',
  enumerable: false
});

Object.defineProperty(userInfo, "date", {
  value: '2022-11-26',
  enumerable: true
});

console.log(JSON.stringify(userInfo));

 

4.4.4 Symbol 无法序列化

const userInfo = {
  name: 'miaomiao',
  [Symbol('testSymbol')]: 'testSymbol'
}
console.log(JSON.stringify(userInfo));

 

关于JSON.parse,你应该知道的..._哔哩哔哩_bilibili-, 视频播放量 1138、弹幕量 1、点赞数 60、投硬币枚数 23、收藏人数 51、转发人数 2, 视频作者 盆盆儿WEB前端, 作者简介 专注分享前端技术,相关视频:【IT老齐169】超级实用,REST接口多层嵌套动态JSON该如何解析?,【node.js实现微信机器人(一)】可自动回复,自动转账加好友等等功能。,超时效果工具类的一个使用场景,你真的了解JSON.stringify吗?,三分钟了解Electron,不要和程序员吵架,尤其是女程序员!,你不知道的String.prototype.replace,用处多多,前端调试小技巧,大大提升前后端联调效率!,如何利用chrome开发者工具做程序运行时的性能优化?,圆角导致的奇怪的“边框”https://www.bilibili.com/video/BV1b3411f7R7/?spm_id_from=333.880.my_history.page.click

5. JSONP

5.1 什么是 JSONP

所有支持 JavaScript 的浏览器,都会使用“同源策略”

JSONP(JSON with Padding) 是 JSON 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即 —— 跨域读取数据

实现原理:利用了 script 标签的 src 没有跨域限制

5.2 JSONP 原理分析及使用

JSONP原理及实现_定栓的博客-CSDN博客_jsonp基本原理: 主要就是利用了 script 标签的src没有跨域限制来完成的。https://blog.csdn.net/weixin_44116302/article/details/124440154

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/37224.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ML特征工程】第 4 章 :特征缩放的影响:从词袋到 Tf-Idf

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

【知识网络分析】耦合网络(bibliographic coupling)

耦合网络(bibliographic coupling) 1 读取本地文献并构建耦合网络数据集2 网络数据集精简3 中心点附近网络子群绘制4 求解网络图中节点中心度相关指标数值1 读取本地文献并构建耦合网络数据集 新建一个notebook文件,第一步导入功能包和数据集,案例中仍使用2020-2021年WOS数…

第八章《Java高级语法》第2节:补码

在Java语言中,使用补码的形式来表示数字。补码是计算机表示数字的一种规则或者是表示形式,它的算法很简单:用最左边的一个二进制位表示数字的正负,0表示正数,用1表示负数,专业上把表示符号的这个二进制位叫做“符号位”。符号位后面剩余的二进制位表示数字本身。 对于正…

PyQt5 QWebEngineView网页交互

QWebEngineView网页交互QWebEngineView常用方法加载并显示外部的Web页面加载并显示本地的Web页面加载并显示嵌入的HTML代码QWebEngineView常用方法 方法描述load(QUrl url)加载指定的URL并显示setHtml(QString &html)将网页视图的内容设置为指定的HTML内容 核心代码&#…

chapter2——时钟和复位

目录1.同步设计2.推荐的设计技术3.时钟方案4.门控时钟方法学5.复位信号的设计策略6.控制时钟偏移1.同步设计 在同步设计中由单个主时钟和单个主置位/复位信号驱动设计中所有的时序器件&#xff0c;对于ASIC的时钟域控制最安全的方法就是同步设计。 避免使用行波计数器 由于第…

Python 实现自动化测试 dubbo 协议接口

前言 在工作或学习过程中&#xff0c;可能会遇到后端服务里有使用 dubbo 协议实现的接口&#xff0c;dubbo 协议接口的测试方法不同于 http/https 类型的接口&#xff0c;不能简单使用request.post的方法来完成自动化测试。 如果需要对 dubbo 协议的接口进行自动化测试&#…

FFmpeg进阶:生成视频的缩略图

文章目录1.读取对应位置的视频帧2.添加时间信息3.对图像进行拼接4.输出拼接图像5.显示效果很多时候为了方便预览视频内容&#xff0c;我们会随机的抽取视频当中的一些帧组成一个图片作为视频的缩略图。这里介绍一下如何通过FFmpeg生成视频的缩略图。其实原理很简单&#xff0c;…

MyBatis association解决多对一和collection解决一对多的映射关系

多对一的映射关系 创建Emp和Dept类 1.处理多对一映射关系方式一&#xff1a;级联属性赋值 2.处理多对一映射关系方式二&#xff1a;association实现 association:处理多对一的映射关系 property:需要处理多对的映射关系的属性名 javaType:该属性的类型 3.处理多对一映射关…

Metabase学习教程:视图-6

表格视图几乎可以来做所有的事情 了解如何设置条件格式、小条形图、值格式等。 表格是数据的自然栖息地&#xff0c;对应关系数据库列和对应的行记录。它们可能不像条形图或者地图&#xff0c;但当你在很多领域工作时&#xff0c;它们往往是你所需要的。Metabase中的表可视化…

运动品牌推荐:2022年最值得入手的一些运动装备

运动是一个比较枯燥的过程&#xff0c;不断的身体重复&#xff0c;会让运动者的注意力过度的关注到自己身体的疲惫感并且放大&#xff0c;这个时候我们就可以通过外在的运动装备来消除这些疲劳感&#xff0c;提高自己的运动积极性。不过哪些运动装备好用并适合自己呢&#xff1…

服务器配置怎么查看

服务器配置怎么查看 在我们找服务器商买服务器时&#xff0c;一般都是根据自己需求来选择需要什么配置的服务器。 选服务器时主要看CPU、内存、硬盘、带宽、这几个主要配置今天艾西就教你怎么查看服务器配置 CPU、内存怎么查看&#xff1a; 方法一&#xff1a;我们远程进入服…

学术Paper写作技巧要点讲解

在国外图书馆阅读他人的学术文章的时候&#xff0c;是否发现他们英文与你的不一样&#xff1f;虽然他们的Paper与你的有相似的结构&#xff0c;即开头、正文、结论&#xff0c;但是你的写作与他们的比起来还是显得简单多了。就是类似于国内毕业Paper的写作&#xff0c;在国外学…

断点续传小解

断点续传的原理 HTTP 协议是互联网上应用最广泛网络传输协议之一&#xff0c;它基于 TCP/IP 通信协议来传递数据。断点续传的奥秘就隐藏在这 HTTP 协议中了。 我们知道HTTP请求会有一个Request header 和 Response header&#xff0c;在请求头里边有个和Range相关的参数 当下…

6种交互式内容创意帮助跨境电商卖家提高独立站商店知名度

关键词&#xff1a;跨境电商卖家、独立站商店 交互式内容是一种允许用户与之交互的内容。一些示例包括在线投票、问答环节、交互式视频和交互式计算器等交互式工具。此内容类型允许查看者通过单击或拖动项目来自定义显示方式和内容。内容还可以引导读者采取您想要的操作&#x…

【网络安全】——sql注入之云锁bypass

作者名&#xff1a;Demo不是emo 主页面链接&#xff1a;主页传送门创作初心&#xff1a;舞台再大&#xff0c;你不上台&#xff0c;永远是观众&#xff0c;没人会关心你努不努力&#xff0c;摔的痛不痛&#xff0c;他们只会看你最后站在什么位置&#xff0c;然后羡慕或鄙夷座右…

嵌入式分享合集110

一、功耗&#xff0c;成为芯片设计的头号问题 很明显&#xff0c;热量将成为半导体未来的限制因素。已经有很大一部分芯片在任何时候都是黑暗的&#xff0c;因为如果所有东西同时运行&#xff0c;所产生的热量将超过芯片和封装消散该能量的能力。如果我们现在开始考虑堆叠模具…

智能网卡的网络加速技术

2021年9月25日&#xff0c;由“科创中国”未来网络专业科技服务团指导&#xff0c;江苏省未来网络创新研究院、网络通信与安全紫金山实验室联合主办、SDNLAB社区承办的2021中国智能网卡研讨会中&#xff0c;多家机构谈到了智能网卡的网络加速实现&#xff0c;我们对此进行整理&…

金枪鱼群优化算法(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

跑步需要哪些运动装备?跑步装备选购指南

跑步是一项有氧运动&#xff0c;是富有韵律性的运动,在运动过程中&#xff0c;血液可以供给心肌足够的氧气&#xff1b;氧气能充分酵解体内的糖分&#xff0c;还可消耗体内脂肪&#xff0c;增强和改善心肺功能&#xff0c;预防骨质疏松。 而在跑步的时候选择好自己的运动装备&…

代码随想录训练营第32天|LeetCode 122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II

参考 代码随想录 题目一&#xff1a;LeetCode 122.买卖股票的最佳时机II 按照自己的想法&#xff0c;无非就是在最低点买入&#xff0c;在最高点卖出&#xff0c;因此只需要找到成对的极小值和极大值&#xff0c;就可以计算利润了。代码实现如下&#xff1a; class Solutio…