JSON字符串和Javascript对象字面量
JSON字符串和Javascript对象字面量
JSON是基于Javascript语法的一个子集而创建的,特别是对象和数组字面量语法。
正是由于JSON的这种特殊来历,导致很多Javascript程序员往往会混淆Javascript对象字面量和JSON。
1 JSON是纯文本,不是Javascript代码
JSON是作为XML的替代品而出现的,它本身是一种跨平台的数据表示标准,是纯文本字符串,不局限于任何编程语言。
Javascript代码则必须需符合其语言规范,不能在其他语言中直接使用。
2 JSON文本是Javascript语言中的合法源代码
然而由于JSON本身选用了Javascript的语法子集,导致了JSON字符串本身就是合法的Javascript源代码片段。
var person =
// 下面的Javascript代码正好符合JSON
{
"name": "SMSTONG",
"title": "DBA“,
"age": 18
}
然而,我们不能把上面的代码叫做JSON,因为它出现在Javascript源文件中,是Javascript代码,不是纯文本。只能把它叫做Javascript对象字面量。
3 Javacript字面量代码不一定是合法的JSON文本
所有的JSON文本都是合法的Javascript源代码片段,但是反过来去不成立。因为JSON只是Javascript的一个子集而已,Javascript还有很多的部分是不符合JSON规范的。例如:
var person =
// 下面的Javascript代码不符合JSON
{
name: "SMSTONG",
title: "DBA“,
age: 18
}
我们把包围属性名的双引号去掉了,仍然是合法有效的Javscript对象字面量代码,但已经不是合法的JSON文本了,因为JSON要求所有的属性必须加双引号。
不单单是引号的问题,Javascript中还有很多数据类型也是JSON不支持的,如函数:
var person =
{
"name":"SMSTONG",
"fight": function(){
alert('fighting the enemy!');
}
}
上面是非常常见的合法的对象字面量,然而却不是合法的JSON,因为JSON还不支持函数这种数据类型。
4 eval()的参数是Javascript源代码片段,而不是JSON字符串
eval(str)函数本质上是把str作为Javascript代码来执行的,例如:
var obj = eval("{}");
上述代码运行时会产生错误,因为eval会把{}当成是没有名字的Javascript语句。
解决办法是,加上小括号:
var obj = eval("({})");
此时,小括号内部先运算得到一个空对象,然后返回。
对于JSON字符串,通用的解析方法为:
var obj = eval("(" + jsonText + ")");
在ECMAScript3.1标准中,已经提供了一个名为JSON的全局对象,专门用来解析和反解析JSON字符串。
var obj = JSON.parse("{}");
与eval完全不同,JSON.parse()方法,把参数当成是JSON字符串文本,而不是Javascript代码,所以只要是合法的JSON字符串就可以。
1.首先明确JSON是什么?
- json是一种数据交换格式,是纯文本的字符串,是作为一种替代XML数据格式角色出现,json简单易读方便转换跨平台,有很多json api提供了json字符串与对象互转的方法,如下面JavaScript中json字符串互转的方法。
JSON.stringify()//将对象转化为json字符串
JSON.parse()//将json字符串转化了对象
2.JSON和JavaScript的关系是怎样的呢 ?
- json开始是JavaScript语法中的一个子集,后来人们觉得这种形式的用来作为数据交换格式不错,就单独将它拿了出来,这也是造成大家对JSON,JSON字面量,JSON对象之间混淆不清的缘由了。
3.JSON字面量又是什么呢
- 一般的我们创建一个对象的方法
var obj1=new Object();
var obj2={}//字面量
- 上面的第二种就是JavaScript对象字面量的写法。那那json字面量是什么呢,那我们在看看下面的一段代码
var person={
"name":"xianyu",
"age":24,
"love":"Online Game"
}
从上我们可以看出这就是用字面量表示一个对象,而这个格式就是json格式的, 因为本身json就是JavaScript语法集的一种,所以json字面量就是用json格式的JavaScript对象字面量。
json放到JavaScript中执行是合法代码,是JavaScript对象字面量,但是JavaScript对象字面量不一定是json
var person={
"name":"xianyu",
"age":24,
"love":"Online Game"
}
//和
var person={
name:'xianyu',
age:24,
love:'Online Game',
skill:function(){
alert('basketball')
}
}
- json必须是符合以下
- 1.键一定要用双引号,值如果是字符串也要用双引号包括
- 2.数据只包括,数字,布尔,数组,null,对象,字符串
- 而JavaScript对象字面量属性不用引号也可以,而且值可以是任何类型,函数,undefined或者是正则都是可以的 。json只是JavaScript语法集中的一种,还有很多其他部分的东西都是不符合json的规范。
4.那JSON对象什么呢
- JSON对象就是JavaScript中的一个对象,里面有一些属性和方法供我们使用,如下面2个方法
JSON.stringify()//将对象转化为json字符串
JSON.parse()//将json字符串转化了对象
//利用这2个方法也用可以做一个对象深拷贝
- 额外扩展深拷贝
var obj={name:'xianyu',age:24}
var str=JSON.stringify(obj)//得到json字符串
str=JSON.parse(str)//得到Object {name: "xianyu", age: 24}
str==obj//得到false
var obj1 = obj //直接赋值得到的只是一个指针,两者指向东西都是一样的
obj1==obj//得到true
JSON字符串和Javascript对象字面量的更多相关文章
- JavaScript 对象字面量
JavaScript 对象字面量 JavaScript 对象字面量 在编程语言中,字面量是一种表示值的记法.例如,"Hello, World!" 在许多语言中都表示一个字符串字 ...
- JavaScript对象字面量
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- javaScript高级教程(九) ------javascript对象字面量--------困扰已久的问题
在编程语言中,字面量是一种表示值的记法.例如,"Hello, World!" 在许多语言中都表示一个字符串字面量(string literal ),JavaScript也不例外. ...
- JSON 字符串转换为JavaScript 对象.JSON.parse()和JSON.stringify()
使用 JavaScript 内置函数 JSON.parse() 将字符串转换为 JavaScript 对象: var text = '{ "sites" : [' + '{ &qu ...
- JSON 字符串转换为 JavaScript 对象
将数据组合成json格式的字符串var text = '{ "sites" : [' + '{ "name":"Runoob" , &quo ...
- JSON对象和JavaScript对象直接量的区别--不同之处
JSON对象和JS对象直接量 在工作当中,我们总是可以听到人说将数据转换为JSON对象,或者说把JSON对象转换为字符串之类的话,下面是关于JSON的具体说明. JSON对象并不是JavaScript ...
- 不可不知的JavaScript 之 JSON对象和JavaScript对象直接量
JSON对象和JS对象直接量 在工作当中,我们总是可以听到人说将数据转换为JSON对象,或者说把JSON对象转换为字符串之类的话,下面是关于JSON的具体说明. JSON对象并不是JavaScript ...
- Js里头的对象字面量
JavaScript 对象字面量 在编程语言中,字面量是一种表示值的记法.例如,"Hello, World!" 在许多语言中都表示一个字符串字面量(string literal ) ...
- json,json对象以及js对象字面量的区别
从定义看: json:一种数据交换格式 json对象:js的一个内置对象,拥有JSON.stringify()和JSON.parse()两个方法 js对象字面量:封闭在花括号对({})中的一个对象的零 ...
随机推荐
- 【转载】深入研究Windows内部原理绝对经典的资料
原文:深入研究Windows内部原理绝对经典的资料 另一篇资料:深入研究Windows内部原理系列 (为了方便大家下,我打包了放在一下地址: 1-6:http://download.csdn.net/ ...
- Redis系列六 Redis事务
Redis事务 1.介绍 在Redis事务中可以一次执行多个命令,本质是一组命令的集合.一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞. 2.事务的作用 一个队列中, ...
- create-react-app react-redux项目 配置模块热更新hmr
HRM并不是create-react-app专属的,提供一篇博客介绍hrm http://chrisshepherd.me/posts/adding-hot-module-reloading-to-c ...
- Python零基础入门必知
Python自学知识点总结 //2018.10.09 1. Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido ...
- Siki_Unity_2-10_数据结构与算法
Unity 2-10 数据结构与算法 任务1-1:数据结构简介 数据结构:数据存储的结构,数据之间的关系 数据结构分类: 集合:同属于一个集合 线性结构:数据元素存在一对一的关系 树形结构:数据元素存 ...
- leetcode-分割回文子串
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab" 输出: [ ["aa",&quo ...
- 如何在线测试Exchange的速度
最新碰到了客户需要比较国内版和国际版的Office365的速度问题,微软提供在线工具测试 这里以Exchange 测试为例子,请参考. PS Onenote贴过来只能至图片,各位看官只能将就了 这里有
- metamask注记词
leaf orbit poet zebra toy day put dinosaur review cool pluck throw(m) 一个钱包地址 里面有多个账号 菲苾代表了不同网络
- Catch That Cow(BFS广搜)
Description Farmer John has been informed of the location of a fugitive cow and wants to catch her i ...
- 算法与数据结构实验题 6.3 search
★实验任务 可怜的 Bibi 刚刚回到家,就发现自己的手机丢了,现在他决定回头去搜索 自己的手机. 现在我们假设 Bibi 的家位于一棵二叉树的根部.在 Bibi 的心中,每个节点 都有一个权值 x, ...