生态言据
格式与文件
言据 v1 的值模型、文法、规范序列化、受限解析与 UTF-8 文件读写。
一个.yj文档恰好包含一个根值。空白可以出现在结构符号之间,但据键必须是文字,同一据内不得有重复键,列和据都不接受尾随逗号。
值模型
| 含义 | 言据 | 言序类型 |
|---|---|---|
| 键值集合 | 据【「键」:值】 | 典 |
| 有序序列 | 列【值,值】 | 列 |
| Unicode 文字 | 「青青子衿」 | 文 |
| 十进制数 | 7、-3.14 | 数 |
| 逻辑值 | 真、假 | 理 |
| 空值 | 空 | 空 |
据【
「服务」:据【
「主机」:「127.0.0.1」,
「端口」:8080
】,
「标签」:列【「本地」,「开发」】,
「启用」:真
】言据只接受全角:、,和【】;半角 JSON 标点不是兼容写法。v1 不含注释。数值不接受前导加号、前导零、空小数部分或指数记法,并限制在跨实现可稳定交换的安全十进制范围内。
文字转义
原始换行、回车和制表不能直接出现在言据文字中。使用中文转义可以避免转义符与内容混淆:
| 写法 | 结果 |
|---|---|
\斜 | 反斜线 |
\左 / \右 | 「 / 」 |
\换 | 换行 |
\回 | 回车 |
\表 | 制表 |
据【「路径」:「资料\斜配置.yj」,「说明」:「第一行\换第二行」】未知转义会使整个文档失败,不会保留部分解析结果。
解析与序列化
定 任意值 为 言据.解析(原文);
定 配置:典 为 言据.解析据(原文);
定 项目:列 为 言据.解析列(原文);
定 紧凑:文 为 言据.序列化(配置);
定 两格:文 为 言据.美化(配置);
定 四格:文 为 言据.美化为(配置,4);解析据和解析列在根类型不符时抛出YJ_TYPE。序列化按键的文字顺序输出据,并移除所有非必要结构空白,因此相同值能得到稳定文本。
解析不可信文字时使用显式预算:
定 配置 为 言据.解析受限(原文,{
「最大字符」:65536,
「最大深度」:24,
「最大容器项」:4096
});默认限制返回库默认值,规范限制补齐省略项并拒绝未知键、非正整数和超出硬上限的
配置。解析、校验与普通文件读取也使用默认限制,不会无界处理输入。
处理已有文档时,格式化(原文,宽)会先完整解析再重新输出,宽度必须是 0 至 8 的整数;压缩(原文)等同以宽度 0 重新格式化。格式错误不会被格式化器掩盖。
文件读写
定 配置:典 为 言据.读取据(「config/app.yj」);
定 受限配置 为 言据.读取受限(「config/external.yj」,{「最大字符」:65536});
言据.写入(「build/app.yj」,配置);
言据.美写(「build/app.pretty.yj」,配置);读取、读取据、读取列只读取 UTF-8;写入生成规范单行文档,美写生成两格缩进文档,并在末尾补一个换行。文件操作受应用言序.toml的[权限].文件约束,失败代码为YJ_IO。
下一步可以为配置添加结构校验与路径访问。