【更新】完善json,lua 数据源文档

main
walon 2021-11-18 13:23:14 +08:00
parent 21a745a4f7
commit 4f0addec89
2 changed files with 107 additions and 61 deletions

View File

@ -3,71 +3,40 @@
# json 数据源 # json 数据源
## 以复合json文件形式组织 ## json数据格式
整个表以一个或者多个json文件的形式组织。在table的input属性中手动指定json数据源有以下几种格式
- xxx.json把xxx.json当作一个记录读入。
- *@xxx.json把xxx.json当作记录列表读入。
- field@xxx.json把 xxx.json中的field字段当作一个记录读入。field可以是深层次字段比如 a.b.c。
- *field@xxx.json把xxx.json中的field字段当作记录列表读入。field可以是深层次字段。
比较有趣的是与xlsx数据源相似支持将多个表放到同一个json中不过实践中极少这么做。
如下列示例:
- TbCompositeJsonTable1 从 composite_tables.json的table1字段中读入记录列表从composite_tables2.json中读入记录列表从one_record.json中读入一个记录
- TbCompositeJsonTable2 从 composite_tables.json的table2字段中读入记录列表
- TbCompositeJsonTable3 从 composite_tables.json的table3字段中读入一个记录
```xml 大多数数据格式填法符合直觉,有几个数据类型的格式比较特殊:
<bean name="CompositeJsonTable1"> - set类型。填法为 [v1,v2,...]
<var name="id" type="int"/> - map类型。由于json只支持string类型的key因此map格式填法为 [[k1,v1],[k2,v2]...]
<var name="x" type="string"/> - 多态bean类型。需要 \_\_type\_\_ 属性来指定具体类型名。
</bean>
<bean name="CompositeJsonTable2">
<var name="id" type="int"/>
<var name="y" type="int"/>
</bean>
<bean name="CompositeJsonTable3">
<var name="a" type="int"/>
<var name="b" type="int"/>
</bean>
<table name="TbCompositeJsonTable1" value="CompositeJsonTable1" input="*table1@composite_tables.json,*@composite_tables2.json,one_record.json"/> 不同数据结构在json中格式示例如下
<table name="TbCompositeJsonTable2" value="CompositeJsonTable2" input="*table2@composite_tables.json"/>
<table name="TbCompositeJsonTable3" value="CompositeJsonTable3" mode="one" input="table3@composite_tables.json"/>
```
## 以目录树形式组织
典型用法是以目录为数据源会遍历整棵目录树目录树下每个json文件为一个记录读入。
```xml ```xml
<bean name="DemoType2" > <bean name="DemoType2" >
<var name="x4" type="int" convert="DemoEnum"/> <var name="x4" type="int"/>
<var name="x1" type="bool"/> <var name="x1" type="bool"/>
<var name="x5" type="long" convert="DemoEnum"/> <var name="x5" type="long"/>
<var name="x6" type="float"/> <var name="x6" type="float"/>
<var name="x7" type="double"/> <var name="x7" type="double"/>
<var name="x10" type="string"/> <var name="x10" type="string"/>
<var name="x12" type="DemoType1"/> <var name="x12" type="DemoType1"/>
<var name="x13" type="DemoEnum"/> <var name="x13" type="DemoEnum"/>
<var name="x14" type="DemoDynamic" sep=","/>多态数据结构 <var name="x14" type="DemoDynamic"/>
<var name="v2" type="vector2"/> <var name="v2" type="vector2"/>
<var name="v3" type="vector3"/> <var name="v3" type="vector3"/>
<var name="v4" type="vector4"/> <var name="v4" type="vector4"/>
<var name="t1" type="datetime"/> <var name="t1" type="datetime"/>
<var name="k1" type="array,int"/> 使用;来分隔 <var name="k1" type="array,int"/>
<var name="k2" type="list,int"/> <var name="k2" type="list,int"/>
<var name="k8" type="map,int,int"/> <var name="k8" type="map,int,int"/>
<var name="k9" type="list,DemoE2" sep="," index="y1"/> <var name="k9" type="list,DemoE2"/>
<var name="k15" type="array,DemoDynamic" sep=","/> <var name="k15" type="array,DemoDynamic" />
</bean> </bean>
<table name="TbDataFromJson" value="DemoType2" input="test/json_datas"/>
``` ```
递归遍历test/json_datas整个目录树**按文件名排序后**依次将每个json数据当作一个记录读入。其中1.json文件内容如下 示例json文件内容如下
```json ```json
{ {
@ -94,3 +63,61 @@
"k15":[{"__type__": "DemoD2", "x1":1, "x2":2}] "k15":[{"__type__": "DemoD2", "x1":1, "x2":2}]
} }
``` ```
## 以复合json文件形式组织
整个表以一个或者多个json文件的形式组织。在table的input属性中手动指定json数据源有以下几种格式
- xxx.json把xxx.json当作一个记录读入。
- *@xxx.json把xxx.json当作记录列表读入。
- field@xxx.json把 xxx.json中的field字段当作一个记录读入。field可以是深层次字段比如 a.b.c。
- *field@xxx.json把xxx.json中的field字段当作记录列表读入。field可以是深层次字段。
比较有趣的是与xlsx数据源相似支持将多个表放到同一个json中不过实践中极少这么做。
如下列示例:
- TbCompositeJsonTable1 从 composite_tables.json的table1字段中读入记录列表从composite_tables2.json中读入记录列表从one_record.json中读入一个记录
- TbCompositeJsonTable2 从 composite_tables.json的table2字段中读入记录列表
- TbCompositeJsonTable3 从 composite_tables.json的table3字段中读入一个记录
```xml
<bean name="CompositeJsonTable1">
<var name="id" type="int"/>
<var name="x" type="string"/>
</bean>
<bean name="CompositeJsonTable2">
<var name="id" type="int"/>
<var name="y" type="int"/>
</bean>
<bean name="CompositeJsonTable3">
<var name="a" type="int"/>
<var name="b" type="int"/>
</bean>
<table name="TbCompositeJsonTable1" value="CompositeJsonTable1" input="*table1@composite_tables.json,*@composite_tables2.json,one_record.json"/>
<table name="TbCompositeJsonTable2" value="CompositeJsonTable2" input="*table2@composite_tables.json"/>
<table name="TbCompositeJsonTable3" value="CompositeJsonTable3" mode="one" input="table3@composite_tables.json"/>
```
## 以目录树形式组织
典型用法是以目录为数据源会遍历整棵目录树目录树下每个json文件为一个记录读入。
如下递归遍历test/json_datas整个目录树**按文件名排序后**依次将每个json数据当作一个记录读入。
```xml
<table name="TbDataFromJson" value="DemoType2" input="test/json_datas"/>
```
## 数据tag
与excel格式类似json格式支持记录tag用 \_\_tag\_\_ 属性来指明tag示例如下
```json
{
"__tag__":"dev",
"x":1,
"y":2
}
```

View File

@ -3,44 +3,40 @@
# Lua 数据源 # Lua 数据源
## 以复合lua文件形式组织 ## json数据格式
整个表在一个或者多个lua文件中组织。用法与json数据源相似参见 [json数据源](./data_json.md) 大多数数据格式符合直觉,有几个特殊点:
* 数据前有一个return这是因为 lua 数据是当作 lua 文件加载的,每个加载后的结果当作一个记录读入。
* set 的格式为 {v1, v2, ...}
* 与json不同lua 的table的key支持任意格式所以lua的map可以直接 {[key1] = value1, [key2] = value2, ,,,}
## 以目录树形式组织
* 与 json 相似定义。 定义
* 唯一区别在于, lua 的table的key支持任意格式所以 lua 的map 可以直接 {[key1] = value1, [key2] = value2, ,,,}
* ![如图](images/adv/def_42.png)
* 注意 数据前有一个 return 语句。因为 lua 数据是当作 lua 文件加载的,每个加载后的结果当作一个记录读入。
```xml ```xml
<bean name="DemoType2" > <bean name="DemoType2" >
<var name="x4" type="int" convert="DemoEnum"/> <var name="x4" type="int"/>
<var name="x1" type="bool"/> <var name="x1" type="bool"/>
<var name="x5" type="long" convert="DemoEnum"/> <var name="x5" type="long"/>
<var name="x6" type="float"/> <var name="x6" type="float"/>
<var name="x7" type="double"/> <var name="x7" type="double"/>
<var name="x10" type="string"/> <var name="x10" type="string"/>
<var name="x12" type="DemoType1"/> <var name="x12" type="DemoType1"/>
<var name="x13" type="DemoEnum"/> <var name="x13" type="DemoEnum"/>
<var name="x14" type="DemoDynamic" sep=","/>多态数据结构 <var name="x14" type="DemoDynamic"/>
<var name="v2" type="vector2"/> <var name="v2" type="vector2"/>
<var name="v3" type="vector3"/> <var name="v3" type="vector3"/>
<var name="v4" type="vector4"/> <var name="v4" type="vector4"/>
<var name="t1" type="datetime"/> <var name="t1" type="datetime"/>
<var name="k1" type="array,int"/> 使用;来分隔 <var name="k1" type="array,int"/>
<var name="k2" type="list,int"/> <var name="k2" type="list,int"/>
<var name="k8" type="map,int,int"/> <var name="k8" type="map,int,int"/>
<var name="k9" type="list,DemoE2" sep="," index="y1"/> <var name="k9" type="list,DemoE2"/>
<var name="k15" type="array,DemoDynamic" sep=","/> <var name="k15" type="array,DemoDynamic" />
</bean> </bean>
<table name="TbDataFromLua" value="DemoType2" input="test/lua_datas"/>
``` ```
递归遍历test/lua_datas整个目录树**按文件名排序后**依次将每个lua数据当作一个记录读入。其中1.lua文件内容如下 示例数据
```lua ```lua
return return
@ -67,3 +63,26 @@ return
k15 = { { __type__="DemoD2", x1 = 1, x2=3} }, k15 = { { __type__="DemoD2", x1 = 1, x2=3} },
} }
``` ```
## 以复合lua文件形式组织
整个表在一个或者多个lua文件中组织。用法与json数据源相似参见 [json数据源](./data_json.md)
## 以目录树形式组织
典型用法是以目录为数据源会遍历整棵目录树目录树下每个lua文件为一个记录读入。如下示例递归遍历test/lua_datas整个目录树**按文件名排序后**依次将每个lua数据当作一个记录读入。
```xml
<table name="TbDataFromLua" value="DemoType2" input="test/lua_datas"/>
```
## 数据tag
与excel格式类似也支持记录tag用 \_\_tag\_\_ 属性来指明tag示例如下
```lua
return {
__tag__ = "dev",
x = 1,
y = 2,
}
```