JSON字符串和JS对象
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对象的更多相关文章
- JSON字符串和JS对象之间的转换
JSON字符串和JS对象之间的转换 1 json字符串转换为js对象 1.1 标准json格式字符串转换为Js对象 JSON字符串 str JSON.parse(str) eval(str) eva ...
- JSON字符串与JS对象格式转换
JSON通常用于服务器向客户端传送数据,传回来的JSON数据是字符串的形式,所以要转变为JS对象形式才方便我们使用. JSON字符串转变为JS对象:JSON.parse( ); JS对象转变为JSON ...
- JSON字符串和js对象转换
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON js数据类型: 字符串.数字 ...
- 使用js把json字符串转为js对象的方法
ECMA-262(E3) 中没有将JSON概念写到标准中,还好在 ECMA-262(E5)中JSON的概念被正式引入了,包括全局的JSON对象和Date的toJSON方法. 1,eval方式解析,恐怕 ...
- js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数)
js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数) 一.总结 1.JSON解析:JSON.parse(myJS ...
- json 字符串转换成对象,对象转换成json字符串
json 字符串转换成对象,对象转换成json字符串 前端: 方法一: parseJSON方法: [注意jquery版本问题] var str = '{"name":&qu ...
- Json字符串转换为java对象的各种实现方法【json_lib框架、Gson、org.json】
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://mengzhengbin520.blog.51cto.com/7590564/12 ...
- Json对象与Json字符串的转化、JSON字符串与Java对象的转换
一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符 ...
- Json对象与Json字符串的转化、JSON字符串与Java对象的转换(转)
一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符 ...
随机推荐
- 使用font-size:0去掉inline-block元素之间的空隙
现代浏览器的最新版都支持inline-block,只有该死的ie6.7不支持inline-block,但ie6.7可以通过 display:inline: zoom:1: 来模拟 下面是inline- ...
- Hadoop 核心架构
Hadoop 由许多元素构成.其最底部是 Hadoop Distributed File System(HDFS),它存储 Hadoop 集群中所有存储节点上的文件.HDFS(对于本文)的上一层是Ma ...
- Lock使用实例
using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; usin ...
- Tp5.0 PHPMailer邮件发送
今天突然想起来邮件发送,就看了一下PHPmailer,其实这个用起来很简单,都是封装好的 https://github.com/PHPMailer/PHPMailer,直接下载下来之后,把他放入TP5 ...
- Mybatis和JDBC区别
今天面试中问了这个问题,当时答的不好,现在整理一下. JDBC是Java提供的一个操作数据库的API: MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了 ...
- JDBC事务详解
在JDBC的数据库操作中,事务是由一个或者多个操作组成的一个不可分割的工作单元.JDBC的事务处理包含三个方面:事务的自动提交模式(Auto-commit mode).事务隔离级别(Transacti ...
- rabbitmq安装Management Plugin
运行和安装Rabbitmq Management的步骤如下: 1.进入Rabbitmq安装目录,运行rabbitmq-plugins enable rabbitmq_management 2.运行ra ...
- DevCloud让代码检查更科学
代码检查是软件开发工作中不可或缺的一部分,众所周知,规范化的编码是一个优质项目的保证.华为软件开发云(DevCloud)便提供了专业科学的自动化代码检查工作. 一.华为软件开发云(DevCloud)目 ...
- CentOS系统搭建gitolite服务
1.安装相关支持软件 a.$yum install perl-Time-HiRes openssh-server perl -y b.$yum -y install git 2.服务端操作:创建git ...
- Day1-三元运算及
三元运算:result = Value1 if Condition else Vlaue2 >>> a,b,c = 1,3,5>>> d = a if a > ...