当前位置: 首页 > 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 日志管理
  • 机器学习之特征选择
  • [译]Python中的类属性与实例属性的区别
  • Debian下无root权限使用Python访问Oracle
  • extjs4学习之配置
  • Idea+maven+scala构建包并在spark on yarn 运行
  • iOS 系统授权开发
  • iOS小技巧之UIImagePickerController实现头像选择
  • Java,console输出实时的转向GUI textbox
  • Java知识点总结(JavaIO-打印流)
  • oldjun 检测网站的经验
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • spark本地环境的搭建到运行第一个spark程序
  • SwizzleMethod 黑魔法
  • TypeScript实现数据结构(一)栈,队列,链表
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 翻译--Thinking in React
  • 爬虫模拟登陆 SegmentFault
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 我看到的前端
  • 详解移动APP与web APP的区别
  • 小而合理的前端理论:rscss和rsjs
  • 积累各种好的链接
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (2)nginx 安装、启停
  • (3)(3.5) 遥测无线电区域条例
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (四)模仿学习-完成后台管理页面查询
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • ..回顾17,展望18
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET 8.0 中有哪些新的变化?
  • .Net Core 中间件验签
  • .net中生成excel后调整宽度
  • /bin/rm: 参数列表过长"的解决办法
  • ?