js 对象 / json / jsonb / jsonp 区别
2024-08-30 20:56:13
一、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实现跨域的三种方法
最新文章
- 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文
- CatchPacket网络抓包软件
- Android 使用代码主动去调用控件的点击事件(模拟人手去触摸控件)
- MBR与GPT
- Telerik JustDecompile 2014.1.255.0 开发版(.NET反编译神器,免费下载)
- nohup启动java命令导致dubbo无法注册
- BZOJ4013 : [HNOI2015]实验比较
- Polymorphism
- struts2学习笔记(5)---自己定义拦截器
- HDU-1518 Square(DFS)
- css应用三
- detain ssh server 设置(也许必须是root来安装?)
- Java编程规范(一)
- Http学习之使用HttpURLConnection发送post和get请求(1)
- C++获取基类指针所指子类对象的类名
- JavaScript大厦之JS运算符
- ob_start用法详解
- 16.IO之其他流
- Numpy数组与PIL Image转换
- angularjs component