zoukankan      html  css  js  c++  java
  • 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实现跨域的三种方法

  • 相关阅读:
    Unity Shader 绘制点直线网格等基本图形
    Unity Shader 一个最简单的顶点/片元着色器
    Unity Shader 在表面着色器中控制顶点变换
    对 Unity 颠球动作的实现
    Access denied for user 'root'@'localhost'
    在centos卸载mysql
    Error:No suitable device found: no device found for connection "System eth0"
    VMware虚拟机桥接方式与真实主机共享上网
    网易的一道笔试题的参考解法---关于广告牌投放问题
    ActionScript的for循环
  • 原文地址:https://www.cnblogs.com/xjnotxj/p/12006499.html
Copyright © 2011-2022 走看看