JSON

  • 1. JSON简介
  • 2. JSON与JS Object区别
  • 3. 对象序列化
    • 3.1 JSON序列化
    • 3.2 JSON反序列化

1. JSON简介

JSON(JavaScript Object Notation,JavaScript 对象简谱)是一种轻量级的数据交换格式。
JSON是一种语法,用来序列化对象、数组、数值、字符串、布尔值和 null 。(不包含undefined

JSON可以描述三种格式的数据:

  • object(无序的「键-值」集合)
  • array(有序的值集合)
  • value

具体可参考「每日一题」JSON 是什么?一文,以下语法图均引用自此文。

2. JSON与JS Object区别

JSON基于JavaScript语法,但与之不同:JavaScript不是JSON,JSON也不是JavaScript

两者没有任何的关联,道格拉斯在发明 JSON 的时候参考了 JS 的对象语法而已。

两者区别可参考:MDN文档:JavaScript Object Notation中所描述的JavaScript 与 JSON 的区别:

JavaScript类型 JSON 的不同点
对象和数组 属性名称必须是双引号括起来的字符串;最后一个属性后不能有逗号。
数值 禁止出现前导零( JSON.stringify 方法自动忽略前导零,而在 JSON.parse 方法中将会抛出 SyntaxError);
如果有小数点, 则后面至少跟着一位数字。
字符串 只有有限的一些字符可能会被转义;禁止某些控制字符;字符串必须用双引号括起来。

3. 对象序列化

序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。

简单来说,对象序列化就是将对象的状态转为字符串形式。

可以使用eavl()函数将JSON的字符串解析成JavaScript对象。由于eavl()函数并不安全。因此尽量不要使用此函数。

JavaScript中JSON对象提供了两种方法:用于解析JSON的parse()方法、用于将对象/值转换为 JSON字符串的stringify()方法。除此之外JSON对象没有其他作用,也不能被调用或作为构造函数。

3.1 JSON序列化

JSON.stringify()方法将一个 JavaScript 对象或值转换为 JSON 字符串,如果指定了一个 replacer 函数,则可以选择性地替换值,或者指定的 replacer 是数组,则可选择性地仅包含数组指定的属性。

语法格式:JSON.stringify(value[, replacer [, space]])

  • value:将要序列化成 一个 JSON 字符串的值;
  • replacer:如果该参数是一个函数,则在序列化过程中,被序列化的值的每个属性都会经过该函数的转换和处理;如果该参数是一个数组,则只有包含在这个数组中的属性名才会被序列化到最终的 JSON 字符串中;如果该参数为 null 或者未提供,则对象所有的属性都会被序列化。
  • space:指定缩进用的空白字符串,用于美化输出(pretty-print);如果参数是个数字,它代表有多少的空格;上限为10。该值若小于1,则意味着没有空格;如果该参数为字符串(当字符串长度超过10个字母,取其前10个字母),该字符串将被作为空格;如果该参数没有提供(或者为 null),将没有空格。
  • 返回值:一个表示给定值的JSON字符串。
  • 异常:当在循环引用时会抛出异常TypeError;当尝试去转换 BigInt 类型的值会抛出TypeError
JSON.stringify({});                        // '{}'
JSON.stringify(true);                      // 'true'
JSON.stringify("foo");                     // '"foo"'
JSON.stringify([1, "false", false]);       // '[1,"false",false]'
JSON.stringify({ x: 5 });                  // '{"x":5}'JSON.stringify({x: 5, y: 6});
// "{"x":5,"y":6}"JSON.stringify([new Number(1), new String("false"), new Boolean(false)]);
// '[1,"false",false]'

如果一个被序列化的对象拥有 toJSON 方法,那么该 toJSON 方法就会覆盖该对象默认的序列化行为:不是该对象被序列化,而是调用 toJSON 方法后的返回值会被序列化。

3.2 JSON反序列化

JSON.parse()方法用来解析JSON字符串,构造由字符串描述的JavaScript值或对象。

语法格式:JSON.parse(text[, reviver])

  • text:要被解析成 JavaScript 值的字符串;
  • reviver:转换器, 如果传入该参数(函数),可以用来修改解析生成的原始值,调用时机在parse函数返回之前。
  • 返回值:Object类型;
  • 异常:若传入的字符串不符合 JSON 规范,则会抛出SyntaxError异常。
const json = '{"result":true, "count":42}';
const obj = JSON.parse(json);
console.log(obj.count);        // { result: true, count: 42 }JSON.parse('{"p": 5}', function (k, v) {if(k === '') return v;     // 如果到了最顶层,则直接返回属性值,return v * 2;              // 否则将属性值变为原来的 2 倍。
});                            // { p: 10 }

JavaScript中的JSON序列化/反序列化相关推荐

  1. 【Java】用Jackson进行JSON序列化/反序列化操作

    Java类和JSON Speaker类: import java.util.ArrayList; import java.util.Arrays; import java.util.List;publ ...

  2. python3 中的Json序列化、反序列化 和 字符编码的问题解决

    python3 中的Json序列化.反序列化 和 字符编码的问题解决 参考文章: (1)python3 中的Json序列化.反序列化 和 字符编码的问题解决 (2)https://www.cnblog ...

  3. json序列化c语言,C语言JSON序列化/反序列化

    最近想找一个C语言处理嵌套结构体和结构体数组的json库,理想的是能够很容易处理复杂结构体嵌套,并且使用简单的,但是没找到比较合适的,于是打算自己封装一个: 两个问题: C语言结构体本身没有元数据,这 ...

  4. JS/JavaScript中解析JSON --- JSON.parse()、JSON.stringify()以及$.parseJSON()使用详解

    JS/JavaScript中解析JSON --- JSON.parse().JSON.stringify()以及$.parseJSON()使用详解 现在JSON格式在web开发中非常重要,特别是在使用 ...

  5. Json学习总结(1)——Java和JavaScript中使用Json方法大全

    2019独角兽企业重金招聘Python工程师标准>>> 摘要:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript ...

  6. JSON—JavaScript中的JSON

    JSON的数据格式 JavaScript中的JSON 1.JavaScript与JSON JSON是一种语法,用来序列化对象.数组.数值.字符串.布尔值 null.他基于JavaScript语法,但与 ...

  7. 在JavaScript中解析JSON? [重复]

    本文翻译自:Parse JSON in JavaScript? [duplicate] This question already has answers here : 这个问题已经在这里有了答案 : ...

  8. 在 JavaScript 中创建 JSON 对象

    <html> <body> <h2>在 JavaScript 中创建 JSON 对象</h2><p> Name: <span id=& ...

  9. jsonp请求html页面,JavaScript中的JSON和JSONP

    简单地使用json并不能支持跨域资源请求,为了解决这个问题,需要采用jsonp数据交互协议.众所周知,js文件的调用不受跨域与否的限制,因此如果想通过纯web端跨域访问数据,只能在远程服务器上设法将j ...

最新文章

  1. 转javascript图片预加载技术
  2. iOS Provisioning Profile(Certificate)与Code Signing详解
  3. WINCE6.0 中文支持
  4. hadoop学习笔记2
  5. P3375 【模板】KMP字符串匹配
  6. Tree UVA - 548(二叉树递归遍历)
  7. php的闭包函数bingto_php的闭包
  8. Mip-NeRF:抗混叠的多尺度神经辐射场ICCV2021
  9. 前端开发必备,【项目实战】
  10. 系统报.NET Framework 3.5缺失无法安装问题解决方案
  11. 官方权威地理数据库(2021)已更新,附下载教程
  12. 小米机器人 尘盒配件_小米机器人怎么取出尘盒
  13. 《实战 Linux Socket 编程》Warren W.Gay 图解Key-point学习笔记-1
  14. 强迫症的 LaTeX 学习笔记
  15. python update函数会调用哪些内置函数_Python字典的内置函数中没有 append()操作,可以用 update()来更新字典内容...
  16. 智能家居核心 —— wifi模块
  17. 判断点是否在图形(矩形、椭圆、多边形)内的算法(一)
  18. gitee提交代码碰见的报错:error:failed to push some refs to ‘https: //gitee.com/....‘
  19. Ubuntu18.04安装Ceres库和G20库
  20. Android 高仿唱吧 咔拉ok 商业项目开源代码 K歌合成 伴奏录音合成MP3(音频五)

热门文章

  1. roc曲线spss怎么做_SPSS在线_SPSSAU_SPSS_ROC曲线
  2. python线性回归做预测天气_Python线性回归实例:预测自行车流量
  3. noteexpress如何删除和恢复重复题录
  4. java内存-xms 单位_java堆内存JVM属性调优总结(-Xms -Xmx -Xmn -Xss)
  5. 数字图像处理期末整理
  6. Mobaxterm常用指令集
  7. android 6.0运行时权限应用之图库图片选取
  8. 核密度估计(KDE)原理及实现
  9. react-prop
  10. 脱壳系列(一) - CrypKeySDK 壳