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 ...
随机推荐
- VS #region
1.C# 预处理指令 #region使您得以在使用Visual Studio代码编辑器的大纲显示功能时指定可展开或折叠的代码块. #region name 其中:name 希 ...
- attach()与detach()的使用
attach()与detach()需要配对使用,如果使用了attach而未使用detach,再次使用attach时,会有"对象被屏蔽"的问题,如下:
- 【游记】CSP J/S 2019 游记
J 组 \(2:30\)开始, \(2:13\)还在酒店的我看了看手表...飞奔考场. T1 数字游戏 秒切. 下午某中学某大佬说可用线性基(%) T2 公交换乘 用单调队列思想,秒切. T3 纪念品 ...
- C#语法--委托,架构的血液
委托的定义 什么是委托? 委托实际上是一种类型,是一种引用类型. 微软用delegate关键字来声明委托,delegate与int,string,double等关键字一样.都是声明用的. 下面先看下声 ...
- phpStorm自动生成___jb_tmp___文件
把这个去掉就可以了
- js4——字符转化
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 基于webpack实现多html页面开发框架一 准备工作
本系列主要介绍如何基于webpack实现多html页面开发框架,这里不讲webpack的基本概念,废话不多说,直奔主题! 前置条件: 1.安装node环境,自己去官网下载安装 2.新建文件夹webpa ...
- 第八章 使用jQuery操作DOM
DOM操作: jQuery中提供了一系列操作DOM强有力的方法,它们不仅简化了传统JavaScript操作DOM时繁冗的代码,更加解决了令开发者苦不堪言的跨平台浏览器的兼容. 它还让有页面元素真正动起 ...
- Yii2框架那些折磨人的坑
说点闲话 距离上次写博客,已经有一年了.在动手写之前,总是带着深深的罪恶感.被它折磨许久,终于,还是,动手了. 值得庆祝的一件事:最近开始健身了.每天动感单车45分钟,游泳45分钟,真的是(生)爽(不 ...
- JS操作document对象
找到对象: document.getElementById():返回对拥有指定 id 的第一个对象的引用. document.getElementsByName():返回带有指定名称的对象集合. do ...