首页 > 其他分享 >JS学习笔记9_JSON

JS学习笔记9_JSON

时间:2022-12-20 22:01:21浏览次数:90  
标签:序列化 解析 对象 笔记 js parse JSON JS



1.JSON概述

JavaScript Object Natation,js对象表示法,(像XML一样)是一种数据格式,它与js有相同的语法形式

P.S.一点小历史:JSON之父是道格拉斯,《JavaScript语言精粹》的作者,创造JSON的灵感来自js中的字面量表示法

2.JSON语法

1.表示简单值

例如3, “str”, null, false等等,不支持undefined,而且字符串必须用双引号(JSON里没有单引号表示字符串的用法,这与js不同)

2.表示对象

与js对象字面量类似,但

  • 没有变量声明
  • 没有末尾分号
  • 属性名必须用双引号包裹(很容易错写成单引号或者忘记用引号)

例如:

​​{​​
​​"name"​​​ ​​: ​​​​"ayqy"​​​​,​​
​​"sex"​​​ ​​: ​​​​"M"​​​​,​​
​​"nextSibling"​​​ ​​: {​​
​​"name"​​​ ​​: ​​​​"xxx"​​​​,​​
​​"sex"​​​ ​​: ​​​​"M"​​​​,​​
​​"nextSibling"​​​ ​​: ​​​​null​​
​​}​​
​​}​​

3.表示数组

与数组字面量类似,但

  • 没有变量声明
  • 没有末尾分号

例如:

​​[3, 6, ​​​​false​​​​, ​​​​"ayqy"​​​​, {​​​​"name"​​​ ​​: ​​​​"xxx"​​​​, ​​​​"age"​​​ ​​: 18}]​​

4.复杂数据结构

数组和对象之间可以通过嵌套来创造更复杂的数据结构,例如:

​​[​​
​​1,​​
​​{​​
​​"extra"​​​ ​​: [​​
​​6,​​
​​{​​
​​"id"​​​ ​​: 5,​​
​​"attr"​​​ ​​: ​​​​"value"​​
​​},​​
​​false​​
​​],​​
​​"index"​​​ ​​: 1001​​
​​},​​
​​2​​
​​]​​

3.序列化(js对象转JSON)

[IE8+]和其它主流浏览器有内置JSON对象,可以调用原生方法来序列化js对象:

​​JSON.stringify(obj);​​​​//按照默认规则序列化,值为undefined和值为函数的属性将被忽略​​
​​JSON.stringify(obj, arr/fun(key, value));​​​​//支持过滤一部分属性(只保留arr中列出的属性或者用fun来过滤)​​
​​JSON.stringify(obj, ​​​​null​​​​, num/strPrefix);​​​​//支持格式化,自动换行并每级缩进num个空格或者每级添加一个前缀串​​

对于[IE7-]如何支持,我们稍后再议

4.解析(JSON转js对象)

​​JSON.parse(str);​​​​//直接解析​​
​​JSON.parse(str, fun(key, value));​​​​//按fun解析​​

对于[IE7-]如何支持,我们稍后再议

5.跨浏览器的JSON序列化/解析

对于不支持JSON对象的浏览器可以用一个shim(一个小​​术语​​):

下载地址:​​https://github.com/douglascrockford/JSON-js/​​(道格拉斯自己捏的)

说白了就是个小型js库(压缩之后4KB而已),提供JSON解析和序列化功能。当然,也可以直接用JQuery

道格拉斯还提供了额外的JSON支持(除基本的stringify和parse外):

json2.js: 如果不存在内置JSON对象的话,会给全局对象添个JSON属性,属性值是一个对象,有stringify和parse方法。parse用的是eval方法解析,还用了几个正则表达式检测,防止执行非JSON代码。在现代浏览器中这个js文件啥也不做,原生支持优先。如果不是要支持[IE8-]的话,就不要用这个,也就是说这个文件并不是必须的。

json.js: 本文件包含json2.js的所有功能,还给Object的原型添了toJSONString方法和parseJSON方法,建议不要用。

json_parse.js: 本文件给了parse函数的另一种实现:用递归下降(P.S.语法分析器。。好吧,道格拉斯大爷战斗力略强)代替了eval函数

json_parse_state.js: 本文件给了parse函数的另一种实现:用状态机(P.S.。。。)代替了eval函数

cycle.js: 本文件有两个函数:JSON.decycle和JSON.retrocycle,用来消除/恢复JSON中的环和图结构,JSONPath用来表示数据关系

P.S.上面的是readme文件的简单翻译

参考资料:


 




1.JSON概述

JavaScript Object Natation,js对象表示法,(像XML一样)是一种数据格式,它与js有相同的语法形式

P.S.一点小历史:JSON之父是道格拉斯,《JavaScript语言精粹》的作者,创造JSON的灵感来自js中的字面量表示法

2.JSON语法

1.表示简单值

例如3, “str”, null, false等等,不支持undefined,而且字符串必须用双引号(JSON里没有单引号表示字符串的用法,这与js不同)

2.表示对象

与js对象字面量类似,但

  • 没有变量声明
  • 没有末尾分号
  • 属性名必须用双引号包裹(很容易错写成单引号或者忘记用引号)

例如:

​​{​​
​​"name"​​​ ​​: ​​​​"ayqy"​​​​,​​
​​"sex"​​​ ​​: ​​​​"M"​​​​,​​
​​"nextSibling"​​​ ​​: {​​
​​"name"​​​ ​​: ​​​​"xxx"​​​​,​​
​​"sex"​​​ ​​: ​​​​"M"​​​​,​​
​​"nextSibling"​​​ ​​: ​​​​null​​
​​}​​
​​}​​

3.表示数组

与数组字面量类似,但

  • 没有变量声明
  • 没有末尾分号

例如:

​​[3, 6, ​​​​false​​​​, ​​​​"ayqy"​​​​, {​​​​"name"​​​ ​​: ​​​​"xxx"​​​​, ​​​​"age"​​​ ​​: 18}]​​

4.复杂数据结构

数组和对象之间可以通过嵌套来创造更复杂的数据结构,例如:

​​[​​
​​1,​​
​​{​​
​​"extra"​​​ ​​: [​​
​​6,​​
​​{​​
​​"id"​​​ ​​: 5,​​
​​"attr"​​​ ​​: ​​​​"value"​​
​​},​​
​​false​​
​​],​​
​​"index"​​​ ​​: 1001​​
​​},​​
​​2​​
​​]​​

3.序列化(js对象转JSON)

[IE8+]和其它主流浏览器有内置JSON对象,可以调用原生方法来序列化js对象:

​​JSON.stringify(obj);​​​​//按照默认规则序列化,值为undefined和值为函数的属性将被忽略​​
​​JSON.stringify(obj, arr/fun(key, value));​​​​//支持过滤一部分属性(只保留arr中列出的属性或者用fun来过滤)​​
​​JSON.stringify(obj, ​​​​null​​​​, num/strPrefix);​​​​//支持格式化,自动换行并每级缩进num个空格或者每级添加一个前缀串​​

对于[IE7-]如何支持,我们稍后再议

4.解析(JSON转js对象)

​​JSON.parse(str);​​​​//直接解析​​
​​JSON.parse(str, fun(key, value));​​​​//按fun解析​​

对于[IE7-]如何支持,我们稍后再议

5.跨浏览器的JSON序列化/解析

对于不支持JSON对象的浏览器可以用一个shim(一个小​​术语​​):

下载地址:​​https://github.com/douglascrockford/JSON-js/​​(道格拉斯自己捏的)

说白了就是个小型js库(压缩之后4KB而已),提供JSON解析和序列化功能。当然,也可以直接用JQuery

道格拉斯还提供了额外的JSON支持(除基本的stringify和parse外):

json2.js: 如果不存在内置JSON对象的话,会给全局对象添个JSON属性,属性值是一个对象,有stringify和parse方法。parse用的是eval方法解析,还用了几个正则表达式检测,防止执行非JSON代码。在现代浏览器中这个js文件啥也不做,原生支持优先。如果不是要支持[IE8-]的话,就不要用这个,也就是说这个文件并不是必须的。

json.js: 本文件包含json2.js的所有功能,还给Object的原型添了toJSONString方法和parseJSON方法,建议不要用。

json_parse.js: 本文件给了parse函数的另一种实现:用递归下降(P.S.语法分析器。。好吧,道格拉斯大爷战斗力略强)代替了eval函数

json_parse_state.js: 本文件给了parse函数的另一种实现:用状态机(P.S.。。。)代替了eval函数

cycle.js: 本文件有两个函数:JSON.decycle和JSON.retrocycle,用来消除/恢复JSON中的环和图结构,JSONPath用来表示数据关系

P.S.上面的是readme文件的简单翻译

参考资料:

标签:序列化,解析,对象,笔记,js,parse,JSON,JS
From: https://blog.51cto.com/u_15740575/5956859

相关文章

  • java中 JSONArray 与 List 相互转换
     1.JSONArray转ListList<T>list=JSONObject.parseArray(array.toJSONString(),T.class);//转换语句1 List<T>list=JSONArray.parseArray(array.toJSONString......
  • .net core 5,6,7【多线程笔记】取消令牌(CancellationToken)
    介绍在使用C#异步的场景,多多少少会接触到CancellationTokenSource。它和取消异步任务相关的,CancellationToken就是它生产出来的。演示任务取消执行回调vartokenSource......
  • FreeSWITCH学习笔记:XML配置文件
    本文更新于2022-12-20,使用FreeSWITCH1.10.7。目录加载顺序autoload_configs/autoload_configs/acl.conf.xmlautoload_configs/callcenter.conf.xmlautoload_configs/cdr_......
  • Java学习笔记1
    1.注释​ 注释是对代码的解释和说明文字。Java中的注释分为三种:单行注释://这是单行注释文字多行注释:/*这是多行注释文字这是多行注释文字这是多行注释文字......
  • es6模块化随笔记
    默认导出与默认导入默认导出的语法:exportdefault默认导出的成员每个模块中只允许使用唯一的一次exportdefault默认导入的语法:import接收名称from‘模块标识符’......
  • 线段树复习笔记——综合应用(吉司机线段树)
    线段树的综合应用接下来,以洛谷P6242【模板】线段树3(超级毒瘤)为例,来看一下线段树的综合应用。先来看一下此题题意,很熟悉的题面:题目描述给出一个长度为\(n\)的数列......
  • HP笔记本无法休眠问题,或者黑屏后无法唤醒,在windows10(win10)系统下
    1可以找找其他的博文里面关于离开模式的设置修改注册表关闭HKEY_LOCAL_MacHINESYSTEMCurrentControlSetControlSessionManagerPowerAwayModeEnabled键值:0,关闭1,开......
  • UE4学习笔记26——【UI】UI动画和暂停游戏
    P68.UI动画和暂停游戏P68(需要包含第一人称射击模板) 新建一个文件夹(WJJ2119P68),在此文件夹中,右键“用户界面——控件蓝图”,重命名为“Pause”,然后打开此控件蓝图;左......
  • 深入原型链与继承(详解JS继承原理)
    目录原型链与继承new关键字的执行过程构造函数、实例对象和原型对象原型链的概念及图解第一层__proto__指向:实例对象第二层__proto__指向:Function.prototype和Foo.prototy......
  • 【笔记】并行计算和MPI
    并行计算有三个层次。进程级并行:通过网络连接在不同计算节点之间传送数据,内存不共享。线程级并行:共享内存。线程内并行:向量化指令级并行。并行编程的基本方法就是分解和协......