JSON 与 JSONB 也是一对冤家。现在很多开源系统和开源软件都支持 JSON 与 JSONB,比如:Postgresql 和 MongoDB 等。

这也导致了面试中被问到 JSON 与 JSONB 的区别时,很多人不知所措!

今天,我们就一起来看看它们之间到底有哪些区别?

在 stackoverflow 上有一个解释,为了方便阅读,我贴在了下面。

首先,hstore是一个扩展模块,它允许你保存key=>values键值对,且键值都只能是texts类型(但是,值也允许sql的NULL)

json与jsonb 允许你保存一个有效的json值(定义).

例如,以下都是有效的json表示方式: nulltrue[1, false, "string", {"foo":"bar"}]{"foo":"bar", "baz":[null]}.

相比json, hstore只是它的一个很小的子集(但是,如果你只需要这个子集,也OK的)

json与jsonb的区别主要是它们的存储方式:

  • json是保存为文本格式的
  • jsonb是保存为二进制格式的

这主要有三方面的影响:

  • jsonb通常比json占用更多的磁盘空间(有些情况不是)
  • jsonbjson的写入更耗时间
  • json的操作比jsonb的操作明显更耗时间(在操作一个json类型值时需要每次都去解析)

jsonb将在未来稳定版发行可用时,这有两个主要使用情况,你很容易在他们之间选择的:

  1. 如果你的应用只用json表示,PostgreSQL只用于保存与获取时,你应该使用json.
  2. 如果你需要在PostgreSQL中做比较多的json值的操作,或者在一些json字段上使用索引时,你应该使用jsonb

官方文档上说:

有两个JSON数据类型:json和jsonb。它们接受几乎 相同的值组作为输入。它们实际的主要差别是效率。

json 数据类型存储输入文本的精确拷贝,处理函数必须在每个执行上重新解析;

而jsonb数据以分解的二进制格式存储,这使得它由于添加了转换机制而在输入上稍微慢些,但是在处理上明显更快,因为不需要重新解析。

jsonb也支持索引,这也是一个明显的优势。

因为json类型存储输入文本的精确拷贝,它将保存令牌间语义上无关紧要的空格,和JSON对象中键的顺序。另外,如果值中的一个JSON对象多次包含相同的键,那么保存所有的键/值对。(处理函数将最后一个值当做操作值。)

相比之下, jsonb不保存空格,也不保存对象键的顺序,并且不保存重复对象键。如果在输入中指定了重复的键,那么只保存最后一个值。

json(jsonb) 的常用函数及操作符

->右操作符为int: 获取JSON数组元素(索引从0开始)

右操作符为text: 通过键获取json值

->>右操作符为int: 获取JSON数组元素为text

右操作符为text: 通过键获取json值为text

其他的如 Postgresql 中常见的操作符:#>,#>>,@>,<@,?,?|,?& 等的用法建议参考官方文档。

总体来说 jsonb 写入比 json 稍慢, 但检索较 json 快些,官方做过测试比较的,用的时候,根据业务来确定。

json vs jsonb,及常用相关推荐

  1. PostgreSQL的json和jsonb比较

    PostgreSQL何以支持丰富的NoSQL特性? 一.引言 PostgreSQL不仅是关系型数据库,同时支持丰富的NoSQL特性 本文主要包含以下三部分内容: PostgreSQL的 JSON和JS ...

  2. postgresql 的json 和jsonb 的使用

    1. json 和jsonb 区别 两者从用户操作的角度来说没有区别,区别主要是存储和读取的系统处理(预处理)和耗时方面有区别. json写入快,读取慢,jsonb写入慢,读取快. 查询操作推荐使用j ...

  3. json和jsonb类型——PostgreSQL

    PostgreSQL支持两种json数据类型:json和jsonb,而两者唯一的区别在于效率,json是对输入的完整拷贝,使用时再去解析,所以它会保留输入的空格,重复键以及顺序等.而jsonb是解析输 ...

  4. PG-NoSQL特性:json和 jsonb 读写性能测试

    json和 jsonb 读写性能测试 文章目录 json和 jsonb 读写性能测试 前言 一.jsonb 类型创建索引 二.json jsonb 表写性能测试 1.写入速度比较 2.两表占用空间间大 ...

  5. Java Json Binding JSON-B使用示例

    JSON-B是用于将Java对象与JSON消息相互转换的标准绑定层.它定义了一种默认的映射算法,用于将现有的Java类转换为JSON,同时使开发人员可以通过使用Java注释自定义映射过程. 安装 座标 ...

  6. pythonjson实例_python:JSON的两种常用编解码方式实例解析

    概念 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写.在日常的工作中,应用范围极其广泛.这里就介绍python下它的两种编解码方法: 使 ...

  7. python内置json模块_python的常用内置模块之序列化模块json

    #什么叫序列化--将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. '''比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给? 现在我们能想到的方法就是存在文 ...

  8. idea json格式化插件_IDEA常用插件

    1.CodeGlance 代码迷你缩放图插件 2. Codota 代码提示工具,扫描你的代码后,根据你的敲击完美提示 Codota基于数百万个开源Java程序和您的上下文来完成代码行,从而帮助您以更少 ...

  9. lableme json转化为图片常用的脚本

    个人记录使用,针对的是16位图像 1. 数据集对比度拓展 import cv2 import os import numpy as np from PIL import Image # 图像混合# f ...

最新文章

  1. Maven build标签
  2. asp.net中jQuery $post用法
  3. mysql 中遍历查询_mysql中循环查询
  4. 传感与检测技术,光电二极管和光敏电阻的特性研究实验报告,江南大学物联网工程学院自动化
  5. sqlmap使用方法
  6. 如何在Mac上的Pages文稿中设置对开页?
  7. mysql开启全局日志_mysql开启全局日志,通过每秒sql语句执行次数分析系统性能瓶颈...
  8. CAT1 4G+以太网开发板腾讯云手机微信小程序显示温度和下发控制
  9. 标签打印软件如何制作箭头样式
  10. 单片机仿真软件 linux,免费的单片机和电路仿真软件SimulIDE,从此再也不用花钱买开发板了...
  11. 前端工程化之前端静态资源缓存优化和部署
  12. Linux操作系统Maven【The JAVA_HOME environment variable is not defined correctly】
  13. 怎样把ICO图标改成圆形的?
  14. uniapp打包之后首页白屏
  15. 牛客每日练习----分元宵,送分啦-QAQ,字符串的问题
  16. [data engineering] (一)数据工程师的工作内容以及需要的软硬实力
  17. 基于Ajax和forms组件实现注册功能
  18. 外仁内圣,以借得天下,以情御英雄
  19. How to tame java GC pauses? Surviving 16GiB heap and greater
  20. 线程二—— 网图下载

热门文章

  1. 2012腾讯实习招聘笔试附加题1求解方法
  2. 26367411153598389kygoq
  3. 频域法分析系统详解及个人笔记
  4. 一学校出150名在校“老板”
  5. 一周信创舆情观察(2.14~2.20)
  6. mui-添加自定义图标(彩色)
  7. HDU6069 欧拉筛法+约数定理+计算技巧。
  8. One Pixel Attack(对抗攻击) —— 使用差分进化算法寻找最优解
  9. 网络诊断工具ping介绍
  10. 数据分析项目实战——Airbnb数据分析