JSON 是一种用来序列化对象、数组、数值、字符串、布尔值和 null 的语法。它基于 JavaScript 语法,但是又有区别:一些 JavaScript 值不是 JSON,而某些 JSON 不是 JavaScript 值
    JSON表示的对象和数组: 属性名称必须用双引号包裹;最后一个属性后面不能有逗号。
    JSON表示的数值: 前导0不能使用;小数点后面至少有一个数字。
    JSON表示的字符串: 只有有限的字符能够被转义;通常不允许控制字符; 但允许使用Unicode 行分隔符 (U+2028) 和段落分隔符 (U+2029) ; 字符串必须用双引号括起来. 在Javascript中,下面的示例中 JSON.parse() 能够正常解析但 SyntaxError 会出错:
JSON.parse() 方法可以将一个 JSON 字符串解析成为一个 JavaScript 值,在解析过程中,还可以选择性的修改某些属性的原始解析值,
        语法:JSON.parse(text[, func]),从text字符串解析出的一个 Object;
        如果指定了func函数,则解析出的 JavaScript 值(解析值)会经过一次转换后才将被最终返回(返回值)。更具体点讲就是:解析值本身以及它所包含的所有属性,会按照一定的顺序(从最最里层的属性开始,一级级往外,最终到达顶层,也就是解析值本身)分别的去调func函数,在调用过程中,当前属性所属的对象会作为 this 值,当前属性名和属性值会分别作为第一个和第二个参数传入func中。如果func返回 undefined,则当前属性会从所属对象中删除,如果返回了其他值,则返回的值会成为当前属性新的属性值。当遍历到最顶层的值(解析值)时,传入 func 函数的参数会是空字符串 ""(因为此时已经没有真正的属性)和当前的解析值(有可能已经被修改过了),当前的 this 值会是 {"": 修改过的解析值},在编写 func 函数时,要注意到这个特例。
JSON.stringify() 方法可以将任意的 JavaScript 值序列化成 JSON 字符串
       语法: JSON.stringify(JSvalue [, replacer [, space] ]) ,返回JSON字符串
            可选参数replacer,如果该参数是一个函数,则在序列化过程中,被序列化的值的每个属性都会经过该函数的转换和处理;如果该参数是一个数组,则只有包含在这个数组中的属性名才会被序列化到最终的 JSON 字符串中;
            可选参数space,用来控制结果字符串里面的间距。如果是一个数字, 则在字符串化时每一级别会比上一级别缩进多这个数字值的空格(最多10个空格);如果是一个字符串,则每一级别会比上一级别多缩进用该字符串(或该字符串的前十个字符)
var s1 = JSON.stringify({a:1,b:2,c:3,d:4}, ['a','b','c'],'属性:');console.log(s1);/*{属性:"a": 1,属性:"b": 2,属性:"c": 3}*/
关于序列化,有下面五点注意事项:
    1.非数组对象的属性不能保证以特定的顺序出现在序列化后的字符串中。
    2.布尔值、数字、字符串的包装对象在序列化过程中会自动转换成对应的原始值。
    3.undefined、任意的函数以及 symbol 值,在序列化过程中会被忽略(出现在非数组对象的属性值中时)或者被转换成 null(出现在数组中时)。
    4.所有以 symbol 为属性键的属性都会被完全忽略掉,即便 replacer 参数中强制指定包含了它们。
    5.不可枚举的属性会被忽略        
    如果一个被序列化的对象拥有 toJSON 方法,那么该 toJSON 方法就会覆盖该对象默认的序列化行为:不是那个对象被序列化,而是调用 toJSON 方法后的返回值会被序列化
var session = {screens : [],state : true,toJSON:function() {return{screens_11:this.screens,state_11: this.state        }    }};session.screens.push({"name":"screenA"});session.screens.push({"name":"screenB"});

var jsonStr = JSON.stringify(session);console.log(jsonStr);//{"screens_11":[{"name":"screenA"},{"name":"screenB"}],"state_11":true}var res = JSON.parse(jsonStr);console.log(res);//{ screens_11: [ { name: 'screenA' }, { name: 'screenB' } ],state_11: true }
完整的JSON语法如下:JSON = nullor true or falseor JSONNumberor JSONStringor JSONObjector JSONArrayJSONNumber = - PositiveNumberor PositiveNumberPositiveNumber = DecimalNumberor DecimalNumber . Digitsor DecimalNumber . Digits ExponentPartor DecimalNumber ExponentPartDecimalNumber = 0or OneToNine DigitsExponentPart = e Exponentor E ExponentExponent = Digitsor + Digitsor - DigitsDigits = Digitor Digits DigitDigit = 0 through 9OneToNine = 1 through 9JSONString = ""or " StringCharacters "StringCharacters = StringCharacteror StringCharacters StringCharacterStringCharacter = any characterexcept " or \ or U+0000 through U+001For EscapeSequenceEscapeSequence = \" or \/ or \\ or \b or \f or \n or \r or \tor \u HexDigit HexDigit HexDigit HexDigitHexDigit = 0 through 9or A through For a through fJSONObject = { }or { Members }Members = JSONString : JSONor Members , JSONString : JSONJSONArray = [ ]or [ ArrayElements ]ArrayElements = JSONor ArrayElements , JSON空白字符可以出现在任意位置,但是数值类型的数字中间不能有空白字符,字符串中间不能随意添加空白字符,因为添加的空白字符会被解释为相应的字符值,从而引起错误。有效空白字符只包括制表符 (U+0009)、回车符 (U+000D)、换行符 (U+000A) 和空格 (U+0020) 。

转载于:https://www.cnblogs.com/susufufu/p/5705800.html

JavaScript学习笔记-JSON对象相关推荐

  1. JavaScript学习笔记:对象

    JavaScript学习笔记:对象 1.声明对象 (1)字面量对象 <!DOCTYPE html> <html lang="en"> <head> ...

  2. JavaScript学习笔记之对象及继承

    JavaScript学习笔记之对象及继承 对象属性 ES5中有两种属性,数据属性和访问器属性. 数据属性包括[[writable]](能否修改属性的值).[[value]]等等: 访问器属性包括[[C ...

  3. 10. JavaScript学习笔记——JSON

    10. JSON ///[JSON是一种数据格式,不是JS 独有的] ///[JSON语法] /* 1.数据书写格式:"name":value,JSON要求给属性名加上[双引号], ...

  4. JavaScript学习笔记——BOM_window对象

    javascript浏览器对象模型-windwo对象 BOM Browser Object Model window对象 是BOM中所有对象的核心. 一.属性 1.(位置类型-获得浏览器的位置) IE ...

  5. javascript学习-创建json对象数据,遍历

    之前我已经有讲过后台返回json数据到前台,并在前台遍历json数据. 这里讲下直接在JS里创建JSON数据,然后遍历使用~ 创建代码例如以下:(创建的是JSON对象) var YearSelect ...

  6. Javascript学习笔记——JSON:js对象简谱

    Javascript不仅是一种编程语言,还被作为一种常用的对象存储和传输格式 JSON:JS 对象简谱 JSON(JavaScript Object Notation)即Javascript对象简谱 ...

  7. JavaScript 学习笔记— —Date对象

    一.获取时间 function toTwo(n){return n<10 ? '0'+n :''+n;}function getTime(){var objDate=new Date(); // ...

  8. Javascript学习笔记8——用JSON做原型

    在Javascript学习笔记5--类和对象中,我简单地提到了利用JSON去构造一个对象.代码如下: <script type="text/javascript">va ...

  9. JavaScript学习笔记05【高级——DOM对象】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

最新文章

  1. tomcat jdk servlet websocket版本对应关系
  2. MATLAB 无约束一维极值问题
  3. U3D assetbundle打包
  4. h5页面生成图片分享到微信js_html2canvas 动态生成微信分享海报的优质js库
  5. 队列的基本操作_算法与数据结构(五) 栈和队列
  6. 数据库的四大特性和事务隔离级别
  7. Leetcode每日一题:724.Find Pivot Index(寻找中心索引)
  8. 25.使用getScript()方法异步加载并执行js文件
  9. 浙大研究生Hadoop工作经验分享
  10. python自动化办公-用 Python 自动化办公能做到哪些有趣或有用的事情?
  11. Linux服务器创建及维护记录
  12. IT行业技术部门人员架构设计
  13. markdown编辑器之editormd使用
  14. ros(28):ros基础知识学习:roscore、ros master、ros::init()、roslaunch
  15. uniapp 公众号 微信授权登录
  16. 超越极限——2009年度DDR3内存横向测试(图)
  17. Tracup丨先进的工作流程管理如何为你节省巨额花销?
  18. webpack打包图片资源问题
  19. C2: 随机事件与样本空间/关系运算
  20. LCA(最近公共祖先)问题

热门文章

  1. CPU 乱序执行验证
  2. Spring Session 的两种刷新模式-RedisFlushMode
  3. HoneyBadgerBFT:一个网络环境无关的Byzantine容错的分布式共识协议
  4. 以太坊智能合约生命周期(Ethereum smart contracts lifecycle)
  5. Hyperledger Fabric 交易流程
  6. class? clazz参数_Java如何获取方法参数具体名称?这是个好问题!
  7. python的误差条形图的解释_如何使用python绘制带有误差条的条形图?
  8. android 九宫格封装,Android 九宫格的实现方法
  9. slickgrid 中ajax,slickgrid.js 一种高性能web数据表格组件的探讨
  10. oracle中constraints,oracle constraints(2)