JSON-LD 简介

JSON-LD 的全称是 JSON for Linked Data。它不是新的传输协议,也不是替代 JSON 的格式,而是在 JSON 之上增加语义约定,让数据中的字段、实体和关系可以被不同系统一致理解。

普通 JSON 只说明数据长什么样:

{
  "name": "山海书店",
  "url": "https://example.com"
}

JSON-LD 进一步说明这些字段来自哪个词汇表、这个对象是什么类型、它在 Web 上的稳定身份是什么:

{
  "@context": "https://schema.org",
  "@type": "BookStore",
  "@id": "https://example.com/#store",
  "name": "山海书店",
  "url": "https://example.com"
}

它解决什么问题

问题 JSON-LD 的做法
不同系统字段名冲突 使用 @context 把短字段映射到稳定 IRI
数据缺少实体身份 使用 @id 标识一个可引用的实体
数据类型不明确 使用 @type 说明对象或值的类型
页面内容难被机器理解 使用 Schema.org 等词汇表描述页面主体
多个实体关系松散 使用嵌套对象、@id@graph 表达关系网络

常见使用场景

  • 给网页添加 Schema.org 结构化数据,帮助搜索引擎理解文章、产品、面包屑、组织、FAQ 等信息。
  • 为开放数据、知识图谱或数据门户发布可互联的 JSON。
  • 在 API 中保留普通 JSON 的开发体验,同时让字段具有明确语义。
  • 把一组对象转成 RDF 数据集,供语义 Web 工具链处理。

JSON-LD 与 RDF

RDF 是一种描述“主体-谓词-宾语”三元组的数据模型。JSON-LD 可以序列化 RDF 数据,也可以从普通 JSON 平滑升级而来。你不必一开始就掌握 RDF 才能使用 JSON-LD,但理解下面这件事会很有帮助:

{
  "@id": "https://example.com/books/1",
  "name": "深入理解 Web 数据"
}

可以理解为:

主体 谓词 宾语
https://example.com/books/1 schema:name 深入理解 Web 数据

@context 的作用,就是告诉处理器 name 实际对应哪个完整语义。

什么时候不需要 JSON-LD

  • 数据只在单个内部系统中使用,而且字段含义没有跨系统解释需求。
  • 页面内容不需要被搜索引擎、知识图谱或外部消费方结构化理解。
  • 项目无法保证 JSON-LD 与可见页面内容一致。结构化数据如果与页面实际内容冲突,反而会带来质量风险。

核心心智模型

JSON-LD 可以看作三层叠加:

  1. JSON 层:对象、数组、字符串、数字、布尔值。
  2. 语义层:@context 将字段名映射到词汇表。
  3. 图层:@id@type 和对象引用把数据连接成图。

掌握这三层后,JSON-LD 就不再是一段“SEO 代码”,而是一种可维护的语义数据表达方式。