# GraphData / JSON v1

JSON 对象必须恰有四个字段：`format`、`universe`、`root`、`nodes`。format 必须为1；universe为0..256；root为有效ID。JSON 数值须为数学上的非负整数且可由 Int32 表示；允许如 `1.0` 或 `1e0` 的等值写法。拒绝重复键、未知字段、非有限或分数值。文本长度最多4000000码元，嵌套最多8层。

`nodes` 是 `[variable,low,high]` 三元组数组，对应ID2、3、4……；0为空族，1为只含空集的族。节点两个子ID必须小于自身ID；high必须非零，变量沿边严格增加。同一三元组不得重复，所有非终端节点必须从root可达。低边等于高边是有效ZDD，禁止按ROBDD规则消除。

例如 `{∅,{0}}`：

```json
{"format":1,"universe":1,"root":2,"nodes":[[0,1,1]]}
```

无外部节点引用、管理器身份、权重、标签或业务数据。导入后重新压缩编号，所以任意合法拓扑编号输入的再次序列化不保证字节相同；本库自己的输出采用低边优先后序，往返后字节稳定。调用方如需映射业务项名，应在此格式之外管理，不能为v1对象添加字段。

GraphData接口采用相同规则，`nodes`类型为NodeRecord数组。导入不保留调用方数组，导出也返回独立数组。双方可以使用不同目标后端。
