消息体规范
本文档定义了 KnotLink 协议中消息体的推荐数据表达格式,旨在为开发者提供一套统一、灵活、可互转的数据表达方案。遵循本规范有助于提升生态内软件间的互操作性,降低接入与维护成本。
一、格式概览
KnotLink KLUDF库支持三种标准化的数据表达格式,可根据场景灵活选用:
| 格式 | 设计目标 | 适用场景 | 示例 |
|---|---|---|---|
| 键值对(Key-Value) | 轻量、简洁、低解析开销 | 简单参数传递、IoT/嵌入式设备通信 | name=张三;age=18 |
| JSON | 结构化、可嵌套、机器友好 | 复杂数据交换、程序间通信、配置存储 | {"name":"张三","age":18} |
| (CLI)命令行参数格式 | 人类易输入、命令式交互 | CLI 交互、Shell 脚本调用 | --name 张三 --age 18 |
二、键值对格式
键值对(Key-Value Pairs)
键值对:最简单的数据交换格式之一,仅由键和值组成,通常以简单的分隔符(如冒号或等号)分隔。示例:
key1=value1;key2=value2
基本信息
| 属性 | 说明 |
|---|---|
| 名称 | 键值对(Key-Value Pairs) |
| 设计目标 | 轻量、简洁、低解析开销 |
| 适用场景 | 简单参数传递 |
格式规范
键值对格式由多个键值对组成,键和值之间用 = 分隔,不同的键值对之间用 ; 分隔。
规则说明
| 规则 | 说明 | 示例 |
|---|---|---|
| 键值分隔符 | 键和值之间使用 = | name=张三 |
| 对分隔符 | 多个键值对之间使用 ; | name=张三;age=18 |
| 键命名 | 建议仅包含字母、数字、下划线 | user_name、course_id |
| 值类型 | 所有值均视为字符串 | age=18 视为字符串 "18" |
| 空白字符 | 建议建议不包含空格 | name=张三 而非 name = 张三 |
注意
使用键值对格式时,请保证您的键与值中不包括"="及";"
示例
# 基本用法
course=数学;room=A201;teacher=张老师
# 包含下划线的键
user_name=张三;course_id=MATH101
# 多值场景(以字符串表示)
students=张三,李四,王五;course=数学
三、JSON 格式
JSON(JavaScript Object Notation)
JSON:一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它支持复杂的数据结构,如嵌套的对象和数组。JSON由键值对组成,键和值之间用冒号分隔,不同的键值对之间用逗号分隔,并且整个结构由大括号包围。示例:
{
"key1": "value1",
"key2": "value2",
"key3": ["item1", "item2", "item3"],
"key4": {
"subKey1": "subValue1",
"subKey2": "subValue2"
}
}
基本信息
| 属性 | 说明 |
|---|---|
| 名称 | JSON(JavaScript Object Notation) |
| 设计目标 | 结构化、可嵌套、机器友好 |
| 适用场景 | 复杂数据交换、程序间通信、配置存储 |
格式规范
JSON 格式遵循 RFC 8259 标准。数据由键值对组成,键和值之间用冒号 : 分隔,不同的键值对之间用逗号 , 分隔,整个结构由大括号 {} 包围。
数据类型
| 类型 | 说明 | 示例 |
|---|---|---|
| 字符串 | 双引号包裹 | "hello" |
| 数字 | 整数或浮点数 | 123、3.14 |
| 布尔值 | true 或 false | true |
| 数组 | 有序列表 | [1, 2, 3] |
| 对象 | 嵌套的键值对 | {"key": "value"} |
| 空值 | null | null |
示例
{
"course": "数学",
"room": "A201",
"teacher": "张老师",
"students": ["张三", "李四", "王五"],
"schedule": {
"start": "10:00",
"end": "10:45"
}
}
四、命令行格式(暂未实现)
基本信息
| 属性 | 说明 |
|---|---|
| 名称 | 命令行参数格式,遵循 GNU 风格命令行选项标准 |
| 设计目标 | 人类易输入、命令式交互 |
| 适用场景 | CLI 交互、Shell 脚本调用 |
格式规范
命令行格式以命令行参数形式表达数据,键以 -- 或 - 为前缀,键与值之间用空格或等号 = 分隔,多个参数之间用空格分隔。
--key1 value1 --key2 value2
--key1=value1 --key2=value2
-k1 value1 -k2 value2
规则说明
| 规则 | 说明 | 示例 |
|---|---|---|
| 长选项 | 以 -- 开头 | --course |
| 短选项 | 以 - 开头(单字符) | -c |
| 键值分隔 | 空格或 = | --course 数学 或 --course=数学 |
| 多参数 | 用空格分隔 | --course 数学 --room A201 |
| 带空格的参数值 | 用引号包裹 | --message "今天天气真好" |
| 复杂参数 | 使用 JSON 字符串 | --params '{"course":"数学","time":"10:00"}' |
示例
# 基本用法
--course 数学 --room A201 --teacher 张老师
# 使用等号连接
--course=数学 --room=A201
# 包含空格的参数值
--message "今天天气真好"
# 短选项形式(简写)
-c 数学 -r A201
# 复杂参数(JSON 字符串)
--params '{"course":"数学","time":"10:00"}'
五、版本历史
| 版本 | 日期 | 变更说明 |
|---|---|---|
| v1.0 | 2026-06-21 | 初始版本,纳入键值对、JSON、CLI 三种格式。 |
本文档是 KnotLink 协议规范的一部分,遵循 KnotLink 开源许可证。