JSON和JS对象

一 JSON是什么

JSON是基于文本的,轻量的,用于数据交换的,一种格式。

可以看到JSON的定义里面有很多的定语,现在就每个限定解释一下:

1. 基于文本

这里的意思是相对于哪些基于二进制的数据来说的,所以在传输的过程中,传输的是符合JSON格式的字符串。

2. 轻量的

在JSON之前有一种数据格式xml,在表示数据的时候,他需要很多的标签,所以没有JSON轻量。传输相同的数据,JSON占用的带宽更小。

3. 用于数据交换

JSON轻量,且易于读写。前后端交互过程中:js对象=>JSON字符串=>后端对象,可以看到JSON这种数据很容易转化为各自(前后端)容易理解的对象,所以被广泛的用于数据交换。

4. 一种格式

JSON字符串是有很严格的要求的,下面以js对象做一下比较:

  • 逗号 JSON最后一个属性后面不能加逗号。js对象无所谓,可加可不加。
  • 键名 JSON必须用双引号 js对象无所谓,单引号,双引号,不加都可以。
  • 键值 JSON,可以是null,boolean,string,number,数组,或者符合JSON格式 要求的对象。不能是undefined,函数,(+-)Infinity。

    js对象无所谓,都可以。
  • 数值 JSON不能有前导0,小数点后面必须有数字。js没限制。

二 JS中与JSON有关的三个JSON函数

1 JSON.stringify

该函数有三个参数,第一个为需要序列化的对象,后面两个不常用,在此不做介绍。

先看下面的代码,然后再说这个函数做的那些不为人知的事情。



从上面可以看出:

  • 会把属性转化为双引号。
  • 去掉最后一个属性后面的逗号。
  • boolean,string,number这些包装对象,会被转化为原始值。
  • 不可枚举的属性会直接忽略。
  • NaN,(+-)Infinity,会被转化为null。
  • undefined,函数,Symbol,在数组中都会被转化为null。在非数组对象中都会被忽略掉。

2 JSON.parse

该函数有两个参数,第一个为需要解析的JSON字符串,如果字符串不符合上述JSON字符串的格式要求,会跑出错误。第二个参数为可选的参数,处理解析后的属性然后将其返回。

3 object.toJSON

如果js对象上实现了该方法,当该对象作为参数调用JSON.stringify的时候会首先执行toJSON方法,然后把返回值作为JSON.stringify的参数就行解析。

总结

以上可以看出JSON格式还是挺严格的,但stringify在你看不到的地方为我们做了很多事情,所以一般用这个方法的时候一般不会报错,而parse就不那么友好了,只要不符合格式就会报错,在拿到后台传过来的字符串进行解析的时候,最好try一下,捕获异常。

还有上面三个方法都不兼容<=IE7的浏览器。

JSON字符串和JS对象的更多相关文章

  1. JSON字符串和JS对象之间的转换

    JSON字符串和JS对象之间的转换 1 json字符串转换为js对象 1.1 标准json格式字符串转换为Js对象  JSON字符串 str JSON.parse(str) eval(str) eva ...

  2. JSON字符串与JS对象格式转换

    JSON通常用于服务器向客户端传送数据,传回来的JSON数据是字符串的形式,所以要转变为JS对象形式才方便我们使用. JSON字符串转变为JS对象:JSON.parse( ); JS对象转变为JSON ...

  3. JSON字符串和js对象转换

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON js数据类型: 字符串.数字 ...

  4. 使用js把json字符串转为js对象的方法

    ECMA-262(E3) 中没有将JSON概念写到标准中,还好在 ECMA-262(E5)中JSON的概念被正式引入了,包括全局的JSON对象和Date的toJSON方法. 1,eval方式解析,恐怕 ...

  5. js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数)

    js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数) 一.总结 1.JSON解析:JSON.parse(myJS ...

  6. json 字符串转换成对象,对象转换成json字符串

    json   字符串转换成对象,对象转换成json字符串 前端: 方法一: parseJSON方法:   [注意jquery版本问题] var str = '{"name":&qu ...

  7. Json字符串转换为java对象的各种实现方法【json_lib框架、Gson、org.json】

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://mengzhengbin520.blog.51cto.com/7590564/12 ...

  8. Json对象与Json字符串的转化、JSON字符串与Java对象的转换

    一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符 ...

  9. Json对象与Json字符串的转化、JSON字符串与Java对象的转换(转)

    一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符 ...

随机推荐

  1. Struts2框架的基本使用(三)

    上篇 Struts2框架的基本使用(二)介绍了Action和result的相关配置操作,本篇接着介绍剩下的异常处理机制和Convention插件的使用.下篇文章介绍的是Struts2框架中标签库的使用 ...

  2. .bind.apply() 解决 new 操作符不能用与 apply 或 call 同时使用

    背景: 小明想要用数组的形式为 Cls.func 传入多个参数,他想到了以下的写法: var a = new Cls.func.apply(null, [1, 2, 3]); 然而浏览器却报错Cls. ...

  3. myeclipse/eclipse 配置SSM框架错误之一解决方法

    报错如下: 1. [org.springframework.web.context.ContextLoader] - Root WebApplicationContext: initializatio ...

  4. jdbc连接数据库工具包模板

    jdbc连接数据库操作 jdbc连接数据库模板,收藏可做模板使用(小型工程,一般大工程都会用框架,c3p0等连接,不考虑此种方法!). 配置文件的使用(使用配置文件可以使我们后期的修改更加方便,当然, ...

  5. #使用parser获取图片信息,输出Python官网发布的会议时间、名称和地点。

    # !/usr/bin/env/Python3 # - * - coding: utf-8 - * - from html.parser import HTMLParser import urllib ...

  6. Python之collections序列迭代器下标式循环冒泡算法等

    练习题 元素分类 有如下值集合[11,22,33,44,55,66,77,88,99]将所有大于66的数作为一个列表放在字典的key为k1的value小于等于66的为k2的value {'k1':[7 ...

  7. VueJs开发笔记—IDE选择和WebStorm性能优化、框架特性和数据调用、路由选项以及使用

    一.IDE的选择: VsCode和WebStorm都是不错的选择,两者运行调试都非常的方便都可以使用快捷键运行和停止,就打开项目的速度和对电脑配置的要求来说,vscode要比webstorm要出色很多 ...

  8. 来自一位工作一年多的猿的分享 ------- ioc

    这是我第一次写东西记录吧:还记得小学老师教的写文章要有"开篇 起伏 高潮...高潮 结束",反正我不会用上: 最近在研究IOC这玩意:百度了很多关于这方面的帖子:关于IOC和DI的 ...

  9. C#中设置TextBox控件中仅可以输入数字且设置上限

    首先设置只可以输入数字: 首先设置TextBox控件的KeyPress事件:当用户按下的键盘的键不在数字位的话,就禁止输入 private void textBox1_KeyPress(object ...

  10. GD库知识点

    GD库:PHP的一个扩展库,主要用于绘制动态图,根据数据动态响应的图片 如统计图 验证码 其他的用途如:处理已有图像 图片的缩放 裁剪 图片水印 文字水印 1.安装GD库 2.画图步骤:创建背景图像( ...