js 对象 / json / jsonb / jsonp 区别
一、JSON vs JS 对象
1、区别
| 区别 | Javascript 对象 | Json |
|---|---|---|
| 含义 | 对象的实例 | 一种数据格式(序列化格式) |
| 传输 | 不能传输 | 可以跨平台传输,轻量级 |
| 格式 | 1.键不加引号、加单引号、双引号都行 2.值可以是函数、对象、字符串、数字、boolean 等 |
1. 键必须得加双引号 2. 值不能为函数/undefined/NaN |
注:序列化格式:早期有 XML,后来基于 javascript 诞生了更轻量的 JSON,再后来还有YAML。
针对于科学使用的大量数据集合,例如气候,海洋模型和卫星数据,开发了特定的二进制序列化标准,例如HDF,netCDF和较旧的GRIB。
2、序列化
(1)序列化操作
正序列化 -
JSON.stringify()反序列化 -
JSON.parse()、(不推荐)eval()
// 初始化 JS 对象
var obj_origin = {
a: 1,
b: "2",
'c': 3
}
console.log(obj_origin) // { a: 1, b: '2', c: 3 }
// 正序列化
var objStr = JSON.stringify(obj_origin)
console.log(objStr) // {"a":1,"b":"2","c":3}
// 反序列化
var obj = JSON.parse(objStr)
console.log(obj) // { a: 1, b: '2', c: 3 }
var obj2 = eval("(" + objStr + ")")
console.log(obj2) // { a: 1, b: '2', c: 3 }
(2)eval()
首先,eval() 的功能,是可将一个 JS表达式 求值成特定的对象,所以把字符串解析成 JS 对象只不过是作用之一。
问题一:为什么 eval() 解析时左右要加括号?
答:
1、js 对象是以 ”{}” 的方式开始和结束的,但在 js 中,它会被误当成一个语句块(statement) 来处理。
2、所以加上圆括号,是为了把这个字符串变为表达式,而不是语句来执行。
alert(eval("{}")); // return undefined
alert(eval("({})"));// return object[Object]
问题二:为什么不推荐用 eval() 呢?
答:
虽然 eval 的解析能力是强于 JSON.parse 的,它可以解析不规范的 JSON 字符串,但是上面 问题一 的例子也可以看出,eval 是不安全的,特别是数据是第三方给予的时候。所以还是推荐用 JSON.parse (其实JSON.parse 底层也是调用的eval )。
二、JSON vs JSONB
详看我之前的一篇博文: Postgres 的 JSON / JSONB 类型
三、JSON vs JSONP
详看我之前的一篇博文:AJAX实现跨域的三种方法
js 对象 / json / jsonb / jsonp 区别的更多相关文章
- js中JSON和JSONP的区别,让你从懵逼到恍然大悟
说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域可以通过服 ...
- json,json对象以及js对象字面量的区别
从定义看: json:一种数据交换格式 json对象:js的一个内置对象,拥有JSON.stringify()和JSON.parse()两个方法 js对象字面量:封闭在花括号对({})中的一个对象的零 ...
- json与jsonp区别浅析(json才是目的,jsonp只是手段)
一言以蔽之,json返回的是一串数据:而jsonp返回的是脚本代码(包含一个函数调用): JSON其实就是JavaScript中的一个对象,跟var obj={}在质上完全一样,只是在量上可以无限扩展 ...
- json与jsonp区别浅析(json才是目的,jsonp只是手段) (转)
一言以蔽之,json返回的是一串数据:而jsonp返回的是脚本代码(包含一个函数调用): JSON其实就是JavaScript中的一个对象,跟var obj={}在质上完全一样,只是在量上可以无限扩展 ...
- 【转】json与jsonp区别浅析(json才是目的,jsonp只是手段)
一言以蔽之,json返回的是一串数据:而jsonp返回的是脚本代码(包含一个函数调用): JSON其实就是JavaScript中的一个对象,跟var obj={}在质上完全一样,只是在量上可以无限扩展 ...
- JSON和JSONP区别和联系
由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Socket通讯 ...
- 说说JSON和JSONP区别
前言 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Socke ...
- js 对象与函数的区别
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- JSON和JSONP区别
JSON(JavaScript Object Notation)和JSONP(JSON with Padding) JSON是一种数据交换格式,JSONP是一种跨域数据交互协议 JSONP利用scri ...
随机推荐
- 如何彻底理解Java抽象类 为什么要用抽象类 什么情况下用抽象类
如何彻底理解Java抽象类 为什么要用抽象类 什么情况下用抽象类 呐,到底什么是抽象类,有时明明一个普通类就可以解决了,为啥非得整个抽象类,装逼吗 我曾带着这样的疑惑,查了很多资料,看了很多源码,写了 ...
- Could not resolve dependencies for project, Failed to read artifact descriptor for
一个可能的原因是由于你的网络从局域网(比如实验室网)切换到了代理网络(比如校园公共网). 方法一:重新切换到非代理网络 办法二:repository 或 dependency 名称不对,比如新repo ...
- 洛谷 CF402A Nuts 题解
本蒟蒻又来发题解啦! 这题是个紫题? 好吧,恶意评分可海星? 回到正题 这题很明显是贪心啊: 有a个坚果,b个隔板,x个隔板,最多分成v个区间. 那么我们的贪心策略是: 如果一共使用的挡板小于x,且当 ...
- Redis面试热点之底层实现篇(续)
0.题外话 接着昨天的[决战西二旗]|Redis面试热点之底层实现篇继续来了解一下ziplist压缩列表这个数据结构. 你可能会抱有疑问:我只是使用Redis的功能并且公司的运维同事都已经搭建好了平台 ...
- play-with-docker搭配ffsend完成文件上传及下载(解决从docker hub拉取镜像慢问题)
由于众所周知的原因,大家有的时候pull docker hub上的镜像是很困难的,下载到99%就这么不动了也是很正常的事情 这个时候以下步骤是100%可以解决问题的: 1.找一台国外的服务器安装doc ...
- Create an Embedded Framework in Xcode with Swift
转自:http://zappdesigntemplates.com/create-an-embedded-framework-in-xcode-with-swift/ Post Series: Cre ...
- [TimLinux] JavaScript 模态框可拖动功能实现——jQuery版
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- WY 2019 人工智能数学基础视频教程
├─01.第一阶段:AI数学基石 │ ├─01.第一章:线性代数 │ │ │ ]AI Math_[第1章]线性代数v2 .pdf │ │ │ │ │ └─视频 │ │ 01_本章概述.mp4 │ │ ...
- CS5642-V3与OV5642-FPC通过icamera测试方向的对比图
有朋友会有如此的疑问:CS5642-V3与OV5642-FPC在采集板上通过icamera测试图像方向是一样吗?通过本文您会找到答案 测试:CS5642-V3与OV5642-FPC的管脚在上 以下 ...
- UWP 应用启动速度优化——关闭加载动画
准备 在开始之前,我们应该先处理好预启动来加速启动应用.请参见文末链接. 步骤 关闭加载动画主要在包清单文件中进行. 首先,以代码方式打开 Package.appxmanifest,在顶部的 Pack ...