当前位置: 首页 > news >正文

[ JavaScript ] JSON方法

JSON

JSON(JavaScript Object Notation)是表示值和对象的通用格式。

最初它是为 JavaScript 而创建的,但许多其他编程语言也有用于处理它的库。因此,当客户端使用 JavaScript 而服务器端是使用 Ruby/PHP/Java 等语言编写的时,使用 JSON 可以很容易地进行数据交换。

JavaScript 提供了如下方法:

  • JSON.stringify 将对象转换为 JSON。
  • JSON.parse 将 JSON 转换回对象。

请注意,JSON 编码的对象与对象字面量有几个重要的区别:

  • 字符串使用双引号。JSON 中没有单引号或反引号。所以 'John' 被转换为 "John"
  • 对象属性名称也是双引号的。这是强制性的。所以 age:30 被转换成 "age":30

此外,JSON 不支持注释。向 JSON 添加注释无效。

还有另一种名为 JSON5 的格式,它允许未加引号的键,也允许注释等。但这是一个独立的库,不在语言的规范中。

常规的 JSON 格式严格,并不是因为它的开发者很懒,而是为了实现简单,可靠且快速地实现解析算法。

JSON.stringify 的完整语法是:

let json = JSON.stringify(value[, replacer, space])
  • value

    要编码的值。

  • replacer

    要编码的属性数组或映射函数 function(key, value)

  • space

    用于格式化的空格数量

大部分情况,JSON.stringify 仅与第一个参数一起使用。但是,如果我们需要微调替换过程,比如过滤掉循环引用,我们可以使用 JSON.stringify 的第二个参数。

如果我们传递一个属性数组给它,那么只有这些属性会被编码。

例如,在这里我们 JSON.stringify 一个 student 对象:

let student = {
  name: 'John',
  age: 30,
  isAdmin: false,
  courses: ['html', 'css', 'js'],
  spouse: null
};

// 方法 JSON.stringify(student) 接收对象并将其转换为字符串
let json = JSON.stringify(student);

alert(typeof json); // we've got a string!

alert(json);
/* JSON 编码的对象:
{
  "name": "John",
  "age": 30,
  "isAdmin": false,
  "courses": ["html", "css", "js"],
  "spouse": null
}
*/

排除反向引用

在简单循环引用的情况下,我们可以通过名称排除序列化中违规的属性。

但是,有时我们不能只使用名称,因为它既可能在循环引用中也可能在常规属性中使用。因此,我们可以通过属性值来检查属性。

编写 replacer 函数,移除引用 meetup 的属性,并将其他所有属性序列化:

let room = {
  number: 23
};

let meetup = {
  title: "Conference",
  occupiedBy: [{name: "John"}, {name: "Alice"}],
  place: room
};

room.occupiedBy = meetup;
meetup.self = meetup;

alert( JSON.stringify(meetup, function replacer(key, value) {
  // 需要判断 key=="" 以排除第一个调用时 value 是 meetup 的情况
  return (key != "" && value == meetup) ? undefined : value;
}));

/*
{
  "title":"Conference",
  "occupiedBy":[{"name":"John"},{"name":"Alice"}],
  "place":{"number":23}
}
*/

总结

  • JSON 是一种数据格式,具有自己的独立标准和大多数编程语言的库。
  • JSON 支持 object,array,string,number,boolean 和 null
  • JavaScript 提供序列化(serialize)成 JSON 的方法 JSON.stringify 和解析 JSON 的方法 JSON.parse。
  • 这两种方法都支持用于智能读/写的转换函数。
  • 如果一个对象具有 toJSON,那么它会被 JSON.stringify 调用。

相关文章:

  • 【shell】shell 数组处理
  • 宿舍台灯什么光对眼睛好?推荐适合学生宿舍用的台灯
  • .stream().map与.stream().flatMap的使用
  • 【JVM】10 道不得不会的 JVM 面试题
  • Hadoop系列——大数据概念day1-1
  • ✨Linux定时备份mysql中的数据库(包括Docker)
  • 文件操作安全之-文件上传原理篇
  • 这就是为什么美联储加息 0.75% 可能对比特币有利的原因
  • 冒泡排序算法-python实现
  • 嵌入式分享合集61
  • MySQL进阶语句
  • MySQL:备份与恢复
  • Spring MVC
  • MySQL 日志管理
  • 机器学习之特征选择
  • php的引用
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 2019年如何成为全栈工程师?
  • Android系统模拟器绘制实现概述
  • Git 使用集
  • HTML-表单
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • javascript 哈希表
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Kibana配置logstash,报表一体化
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • pdf文件如何在线转换为jpg图片
  • PHP的Ev教程三(Periodic watcher)
  • python 装饰器(一)
  • Python学习笔记 字符串拼接
  • python学习笔记-类对象的信息
  • Python中eval与exec的使用及区别
  • RxJS: 简单入门
  • SQLServer之创建数据库快照
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • 编写符合Python风格的对象
  • 彻底搞懂浏览器Event-loop
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 关于 Cirru Editor 存储格式
  • 关于for循环的简单归纳
  • 回顾 Swift 多平台移植进度 #2
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 我的业余项目总结
  • 《天龙八部3D》Unity技术方案揭秘
  • python最赚钱的4个方向,你最心动的是哪个?
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (二)c52学习之旅-简单了解单片机
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (十三)Maven插件解析运行机制