前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JSON 与 JSONB

JSON 与 JSONB

作者头像
业余草
发布2019-08-31 19:00:39
4.5K0
发布2019-08-31 19:00:39
举报
文章被收录于专栏:业余草业余草

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/xmt1139057136/article/details/100145513

JSON 与 JSONB 也是一对冤家。现在很多开源系统和开源软件都支持 JSON 与 JSONB,比如:Postgresql 和 MongoDB 等。这也导致了面试中被问到 JSON 与 JSONB 的区别时,很多人不知所措!

640?wx_fmt=png
640?wx_fmt=png

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

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

首先,hstore是一个扩展模块,它允许你保存key=>values键值对,且键值都只能是texts类型(但是,值也允许sql的NULL) json与jsonb 允许你保存一个有效的json值(定义). 例如,以下都是有效的json表示方式: null, true, [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开始)

640?wx_fmt=png
640?wx_fmt=png

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

640?wx_fmt=png
640?wx_fmt=png

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

640?wx_fmt=png
640?wx_fmt=png

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

640?wx_fmt=png
640?wx_fmt=png

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年08月28日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • json(jsonb) 的常用函数及操作符
    • -> 右操作符为int: 获取JSON数组元素(索引从0开始)
      • ->> 右操作符为int: 获取JSON数组元素为text
      相关产品与服务
      云数据库 MongoDB
      腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档