# JSON-LD 简介

URL: https://caijiao.org/json-ld/guide/introduction
Source: docs/json-ld/guide/introduction.md
Description: 介绍 JSON-LD 的定位、适用场景、与普通 JSON 和 RDF 的关系，以及它在网页结构化数据和开放数据中的价值。

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

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

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

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

```json
{
  "@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，但理解下面这件事会很有帮助：

```json
{
  "@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 代码”，而是一种可维护的语义数据表达方式。
