[JSON] JSON / JSONB / JSON-NL / HOCON / JSON-RPC 之间的联系与区别

0 序

这五个易混淆的 JSON 关联名词,它们都处于 JSON 生态之内,但分属不同抽象层与用途。

1 JSON / JSONB / JSON-NL / HOCON / JSON-RPC 之间的联系与区别

综合定位

  • JSON —— 基础数据交换语法(文本,定义值模型)。
  • JSON-NL(JSON Lines / JSONL) —— JSON 的流式逐行编码(一条记录一行)。
  • JSONB —— JSON 的数据库二进制存储形态(关系库中的数据类型)。
  • HOCON —— 面向人类阅读的 JSON 超集(配置文件语言)。
  • JSON-RPC —— 基于 JSON 的远程过程调用协议(应用层消息规范)。

联系(共同点)

  • 共享同一套值模型:五者底层都以 JSON 的六种值类型为基础(object / array / string / number / boolean / null)。
  • 语法内核一致:HOCON 是 JSON 的超集(合法 JSON 必是合法 HOCON);JSONB 与 JSON 接受同一输入文本;JSON-Lines 的每一行就是一个标准 JSON 值;JSON-RPC 的请求/响应本身也是 JSON 对象。
  • 可相互转化:JSON ⇄ JSON-Lines(展开/折叠数组)、JSON ⇄ JSONB(文本解析为二进制)、JSON ⇄ HOCON(HOCON 可写为合法 JSON)、JSON-RPC 载荷亦可用 JSON-Lines 逐行传输。
  • 独立于编程语言:都是跨语言的数据 / 配置 / 协议载体。

区别(本质差异)

维度 JSON JSON-NL(JSONL/NDJSON) JSONB HOCON JSON-RPC
全称 / 本质 JavaScript Object Notation,数据交换文本语法 Newline-Delimited JSON,逐行 JSON 文本序列 Binary JSON,数据库二进制存储类型 Human-Optimized Config Object Notation,配置语言 JSON Remote Procedure Call,基于 JSON 的 RPC 协议
抽象层 数据语法(基础) 数据载体 / 流编码 存储形态(库内类型) 配置表达 应用消息协议
文本 / 二进制 文本 文本 二进制 文本 文本
是否 JSON 超集 ——(基准) 否(子集使用方式) 否(存储层,输入是 JSON) 是(超集) 否(协议,载荷是 JSON)
是否支持注释 否 否 否 是(# //) 否
是否支持索引/查询 否 否 是(GIN 索引、表达式查询) 否 否
记录分隔 无(单文档) 换行符 \n 无(库内值) 无(单文档) 请求/响应成对消息
典型用途 API 载荷、配置文件、通用交换 日志、流式数据、ML 数据集 关系库中的半结构化字段查询 应用 / 框架配置文件 服务间方法调用(RPC)
代表标准/来源 ECMA-404、RFC 8259 jsonlines.org(2013)、NDJSON 1.0、RFC 7464 PostgreSQL 9.4(2014) Lightbend(Typesafe Config) JSON-RPC 2.0(jsonrpc.org)
典型使用方 几乎所有系统 Hadoop/Spark/Flink、LLM 数据集、日志管道 PostgreSQL / MySQL / DWS 等数据库 Play、EMQX 5.0、NanoMQ、Puppet Ethereum、LSP、MCP
人类可读性 中(可格式化) 低(单行压缩) 低(二进制) 高(面向人类) 中

关系示意图

flowchart TD subgraph L1["语法层"] JSON["JSON<br/>基础数据交换语法<br/>(ECMA-404 / RFC 8259)"] end subgraph L2["表达/载体层"] NL["JSON-NL (JSONL/NDJSON)<br/>逐行流式文本序列<br/>面向日志·大数据·ML数据集"] HOCON["HOCON<br/>人类可读配置语言<br/>(JSON 超集: 注释/包含/替换)"] end subgraph L3["存储层"] JSONB["JSONB<br/>数据库二进制存储类型<br/>(PG/MySQL/DWS, 支持索引)"] end subgraph L4["协议层"] RPC["JSON-RPC<br/>远程过程调用协议<br/>(Ethereum/LSP/MCP)"] end JSON -->|"每行一个JSON值"| NL JSON -->|"超集,兼容全部JSON语法"| HOCON JSON -->|"解析为二进制存储"| JSONB JSON -->|"请求/响应载荷用JSON编码"| RPC

选型建议(何时用哪个)

  • 服务间数据交换 / API 载荷 → JSON。
  • 日志、流式 ETL、超大 / 增量数据集、ML 训练样本 → JSON-NL(JSONL/NDJSON)。
  • 关系库中存半结构化字段、需要索引查询与更新 → JSONB(或 MySQL 的 JSON 类型)。
  • 写人类友好的配置文件(带注释、变量替换、include) → HOCON。
  • 在 JSON 之上定义方法调用 / 请求响应协议(如区块链、编辑器 LSP、MCP) → JSON-RPC。

Y 推荐文献

X 参考文献

posted @ 2026-11-02 23:52  千千寰宇  阅读(3)  评论(0)    收藏  举报