生态言据

格式与文件

言据 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。

下一步可以为配置添加结构校验与路径访问。