一、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实现跨域的三种方法

最新文章

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

热门文章

  1. Docker部署Mysql集群
  2. JDK官方下载
  3. cesium添加多个geojson文件并分别控制显示和隐藏
  4. SpringMvc commons-fileupload图片/文件上传
  5. CocoaPods 详解之----更新篇
  6. react-native Android release打包失败
  7. git 使用详解(6)—— 3种撤消操作
  8. CodeForces985G Team Players
  9. 将项目部署到github的方法
  10. DENEBOLA (See3CAM_CX3RDK) - CX3 Reference Design