# Nl2json

> 将自然语言转换成JSON参数。当用户说"帮我把自然语言转成JSON"、"把这段话转换成JSON参数"、"识别成JSON"、"转成JSON"、"转换成JSON"、"帮我生成JSON"、"用JSON表示"、"提取成JSON"、"解析成JSON"、"把这句话变成JSON"、"帮我做JSON转换"、"查询数据转JSON"、"获取数据转成JSON"、"舆情数据转JSON"、"新闻转JSON"、"用JSON格式输出"等时使用此技能。只要用户需要将自然语言描述转换成结构化的JSON数据，就使用此技能。首先读取templates/default.json模板，严格按照模板中定义的字段进行输出，优先保证模板字段的支持。

- Skill: `dvcrn/nl2json` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add dvcrn/nl2json`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dvcrn/nl2json/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: dvcrn (https://skillmd.com/u/dvcrn)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/dvcrn/nl2json

---


# 自然语言转JSON参数技能

这个技能帮助用户将自然语言描述转换成结构化的JSON参数。

## 核心功能

1. **模板优先**：首先读取 `templates/default.json` 模板，严格按照模板字段输出
2. **关键信息提取**：自动从自然语言中提取所有关键信息，填充到模板对应的字段
3. **时间格式转换**：所有时间参数统一转换为 `YYYY-mm-dd H:i:s` 格式
4. **上下文继承**：记住上一次转换的参数，当用户后续输入只有部分信息时，继承上一次的其他参数

## 上下文继承规则

当用户连续进行多次转换时，检查对话历史：

- 如果当前输入是完整查询（包含所有必要信息），按当前输入处理
- 如果当前输入是部分查询（只修改了时间、数量等个别参数），则：
  - 继承上一次转换的 `other` 对象中的所有参数
  - 只用当前输入中的新信息覆盖对应的参数
  - 保持其他参数不变

### 上下文继承示例

**第一次输入：**
"转成json，小米汽车头条数据top10最近一周"

**第二次输入（部分查询）：**
"最近三天呢"

**处理逻辑：**
继承第一次的所有参数，只修改时间范围：
- 继承：source=头条, subject=小米汽车, data_type=数据, limit=top10
- 更新：start_time 和 end_time 改为最近三天

## 使用模板

### 第一步：读取模板

在开始处理前，必须先读取 `templates/default.json` 文件，了解需要输出的字段结构。

### 第二步：按模板字段提取信息

根据模板中定义的每个字段，从用户的自然语言输入中提取对应的信息：

- 对于模板中的 `string` 类型字段，提取对应的文本内容
- 对于模板中的 `object` 类型字段（`{}`），提取相关信息作为嵌套对象
- 对于模板中的 `array` 类型字段（`[]`），提取相关信息作为数组

### 第三步：填充默认值

对于模板中定义但用户输入中没有提到的字段：
- 字符串类型字段：填空字符串 `""`
- 对象类型字段：填空对象 `{}`
- 数组类型字段：填空数组 `[]`
- 不要省略模板中定义的任何字段

## 时间格式转换规则

所有时间参数必须转换为 `YYYY-mm-dd H:i:s` 格式：

### 相对时间转换示例

| 自然语言描述 | 转换结果 (当前日期: 2026-03-04) |
|-------------|----------------------------------|
| 今天 | 2026-03-04 00:00:00 |
| 昨天 | 2026-03-03 00:00:00 |
| 最近1天 | start_time: 2026-03-03 00:00:00, end_time: 2026-03-04 23:59:59 |
| 最近7天 | start_time: 2026-02-25 00:00:00, end_time: 2026-03-04 23:59:59 |
| 本周 | start_time: 2026-03-02 00:00:00, end_time: 2026-03-08 23:59:59 |
| 上周 | start_time: 2026-02-23 00:00:00, end_time: 2026-03-01 23:59:59 |
| 本月 | start_time: 2026-03-01 00:00:00, end_time: 2026-03-31 23:59:59 |
| 上个月 | start_time: 2026-02-01 00:00:00, end_time: 2026-02-28 23:59:59 |

### 具体时间转换示例

| 自然语言描述 | 转换结果 |
|-------------|---------|
| 2026年3月5日 | 2026-03-05 00:00:00 |
| 2026-3-5 14:30 | 2026-03-05 14:30:00 |
| 3月5日下午3点 | 2026-03-05 15:00:00 |
| 明天上午9点 | 2026-03-05 09:00:00 |

## 工作流程

1. **读取模板**：首先读取 `templates/default.json` 文件，确认需要输出的字段
2. **检查上下文**：查看对话历史，判断是否有上一次的转换结果
3. **判断查询类型**：
   - 如果是完整查询（包含source、subject、data_type等主要信息），按新查询处理
   - 如果是部分查询（只修改时间、数量等个别参数），继承上一次的参数
4. **接收输入**：接收用户输入的自然语言
5. **提取信息**：
   - 完整查询：从当前输入中提取所有信息
   - 部分查询：从上一次结果中继承参数，用新信息覆盖对应字段
6. **格式转换**：将所有时间参数转换为 `YYYY-mm-dd H:i:s` 格式
7. **填充字段**：按照模板结构填充所有字段，缺失的字段用默认值填充
8. **输出JSON**：直接输出生成的JSON，严格保持模板的字段结构

## 使用方式

### 触发短语示例

用户可以用以下任何方式触发此技能：

**直接转换类：**
- "帮我把这段话转成JSON：..."
- "帮我转换JSON，..."
- "识别成JSON：..."
- "转成JSON：..."
- "转换成JSON：..."
- "用JSON表示：..."
- "提取成JSON：..."
- "解析成JSON：..."
- "把这句话变成JSON：..."
- "帮我做JSON转换：..."

**查询数据类：**
- "查询数据转JSON：..."
- "获取数据转成JSON：..."
- "舆情数据转JSON：..."
- "新闻转JSON：..."
- "搜索结果转JSON：..."

**格式输出类：**
- "用JSON格式输出：..."
- "按JSON格式整理：..."
- "输出成JSON：..."
- "返回JSON格式：..."

### 使用场景示例

**舆情监控场景：**
- "查询人民网最近1天关于小米汽车的负面舆情数据"
- "获取微博上本周关于张三的新闻"
- "看看抖音上最近7天关于AI的热门话题"

**数据查询场景：**
- "查找本月关于新能源汽车的报道"
- "搜索最近3天的科技新闻"
- "获取头条的舆情数据top10"

**简单查询场景：**
- "获取舆情数据"
- "查询新闻"
- "查找相关信息"

## 输出格式

假设 `templates/default.json` 模板为：
```json
{
  "input": "string",
  "question_name": "string",
  "other": {}
}
```

则输出格式如下（严格按照模板字段）：
```json
{
  "input": "帮我转换JSON，查询人民网最近1天关于小米汽车的负面舆情数据",
  "question_name": "查询人民网最近1天关于小米汽车的负面舆情数据",
  "other": {
    "source": "人民网",
    "start_time": "2026-03-03 00:00:00",
    "end_time": "2026-03-04 23:59:59",
    "subject": "小米汽车",
    "sentiment": "负面",
    "data_type": "舆情数据"
  }
}
```

## 上下文继承示例

### 示例一：修改时间范围

**第一次输入（完整查询）：**
```
转成json，小米汽车头条数据top10最近一周
```

**第一次输出：**
```json
{
    "input": "转成json，小米汽车头条数据top10最近一周",
    "question_name": "小米汽车头条数据top10最近一周",
    "other": {
        "source": "头条",
        "subject": "小米汽车",
        "data_type": "数据",
        "limit": "top10",
        "start_time": "2026-02-25 00:00:00",
        "end_time": "2026-03-04 23:59:59"
    }
}
```

**第二次输入（部分查询，只修改时间）：**
```
最近三天呢
```

**第二次输出（继承其他参数，只修改时间）：**
```json
{
    "input": "最近三天呢",
    "question_name": "小米汽车头条数据top10最近三天",
    "other": {
        "source": "头条",
        "subject": "小米汽车",
        "data_type": "数据",
        "limit": "top10",
        "start_time": "2026-03-02 00:00:00",
        "end_time": "2026-03-04 23:59:59"
    }
}
```

### 示例二：修改数量限制

**第一次输入：**
```
查询小米汽车微博热点数据top10最近一周
```

**第二次输入（只修改数量）：**
```
top20
```

**第二次输出（继承其他参数，只修改limit）：**
```json
{
    "input": "top20",
    "question_name": "小米汽车微博热点数据top20最近一周",
    "other": {
        "source": "微博",
        "subject": "小米汽车",
        "data_type": "热点数据",
        "limit": "top20",
        "start_time": "2026-02-25 00:00:00",
        "end_time": "2026-03-04 23:59:59"
    }
}
```

### 示例三：修改来源

**第一次输入：**
```
查询小米汽车微博热点数据top10最近一周
```

**第二次输入（只修改来源）：**
```
换成抖音
```

**第二次输出（继承其他参数，只修改source）：**
```json
{
    "input": "换成抖音",
    "question_name": "小米汽车抖音热点数据top10最近一周",
    "other": {
        "source": "抖音",
        "subject": "小米汽车",
        "data_type": "热点数据",
        "limit": "top10",
        "start_time": "2026-02-25 00:00:00",
        "end_time": "2026-03-04 23:59:59"
    }
}
```

## 部分查询识别规则

以下输入被识别为部分查询，触发上下文继承：

- 只包含时间："最近三天呢"、"改成昨天"、"本周"
- 只包含数量："top20"、"改成前5"、"100条"
- 只包含来源："换成微博"、"改人民网"、"头条"
- 只包含主题："换成比亚迪"、"改AI"、"特斯拉"
- 只包含数据类型："改成新闻"、"舆情"、"热点"

如果输入包含两个或多个以上新参数，或输入是一个全新的完整查询，则按新查询处理，不继承上下文。

## 重要提示

- **最重要**：首先读取 `templates/default.json` 模板，严格按照模板中定义的字段输出
- **上下文继承**：检查对话历史，如果用户输入是部分查询，继承上一次的参数
- 不要省略模板中定义的任何字段，即使没有值也要保留
- 所有时间参数必须转换为 `YYYY-mm-dd H:i:s` 格式
- 当前日期以系统提示的 currentDate 为准
- 相对时间"最近N天"包含今天，往前推N天
- 时间范围如果只说了开始或结束，另一端用合理默认值填充
- 提取所有能识别的关键信息，填充到对应的模板字段
- 部分查询时，`question_name` 字段需要更新为完整的查询描述
- 保持JSON格式的正确性，确保可以直接解析
- 输出时只包含JSON，不需要额外的说明文字

