首页 > Web开发 > 详细

js 对象 / json / jsonb / jsonp 区别

时间:2019-12-08 19:04:55      阅读:121      评论:0      收藏:0      [点我收藏+]

一、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 区别

原文:https://www.cnblogs.com/xjnotxj/p/12006499.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!