生态言据

数据处理与转换

深层比较、递归合并、可校验补丁以及 JSON、TOML 和数据库文本互转。

言据标准库的数据操作都以言序原生值为输入,不要求先把值重新序列化成文字。

深复制与比较

深复制复制每个列和据节点,所得容器不与原值共享可变节点。相同递归比较值;据的键顺序不影响结果。

 副本  言据.深复制(配置);
测试.断言(言据.相同(配置,副本),「副本应保持数据语义」);

递归合并

合并两个据时,相同键下的据继续递归合并,其他值由覆盖侧替换。合并据提供明确的返回类型:

 默认配置: {
    「服务」:{「主机」「127.0.0.1」「端口」8080},
    「标签」:【「默认」
};
 用户配置: {
    「服务」:{「端口」9090},
    「标签」:【「用户」
};

 最终配置: 言据.合并据(默认配置,用户配置);

普通合并合并据默认替换列。合并为的第三个参数可选:

策略结果
替换使用覆盖侧的列
连接顺序连接两侧,保留重复项
去重顺序连接,只保留每个深层值的首次出现

合并会深复制结果,不会改写任一输入。非法策略产生YJ_MERGE

结构化差异

差异(旧值,新值)返回稳定排序的变化列。每项包含操作、路径段列路径旧值新值;操作是新增删除修改

 各差: 言据.差异(默认配置,最终配置);
 言据.美化(各差);

差异适合审计、测试、展示变化,也可以作为 1.2 补丁入口的稳定输入。

校验并应用补丁

1.2 的应用差异应用补丁重放差异结果。修改和删除前会比较补丁中的旧值, 避免静默覆盖已经变化的基础数据:

 各差: 言据.差异(旧配置,新配置);
 已重放  言据.应用补丁(旧配置,各差);

路径、操作、字段或旧值不合法返回YJ_PATCH;旧值冲突返回YJ_PATCH_CONFLICT。冲突时 重新读取基础值并计算新差异,不应移除旧值检查强行覆盖。重放深复制结果,不改写输入。

JSON 互转

 言据.自JSON(JSON输入);
 对象: 言据.自JSON据(JSON输入);
 数组: 言据.自JSON列(JSON输入);

 JSON输出: 言据.转JSON(值);
 言据原文: 言据.JSON转言据(JSON输入);

自JSON据自JSON列会检查根类型。JSON 解析与序列化失败统一包装为YJ_JSON言据转JSONJSON转言据是两个文本格式之间的直接转换接口。

配置型 TOML 互转

 配置: 言据.自TOML(TOML输入);
 TOML输出: 言据.转TOML(配置);

 言据原文: 言据.TOML转言据(TOML输入);
 TOML直转: 言据.言据转TOML(言据输入);

TOML 接口面向常见配置,支持单行键值、表、点分键、基础和字面文字、逻辑、十进制数、列、行内表及注释。输出按键稳定排序。

日期时间、非十进制数、指数、多行文字、表列以及 TOML 无法表示的会产生YJ_TOML,不会静默改写或丢失类型。需要保存言据的完整值模型时,应继续使用.yj

数据库规范文本

 入库文: 言据.数据库文本(值);
 出库值  言据.自数据库文本(入库文);
 已审计值  言据.自规范数据库文本(入库文);

第一项生成确定的.yj文本,适合所有数据库的 TEXT/CLOB。严格入口在文本不是规范形式 时返回YJ_CANONICAL。数据库原生 JSON 是另一种结构化表示,导出.yj时仍要规范序列化。

持续传输多个值时,不要手工拼接容器,使用言据流