本帖最后由 赛龙周 于 2022-10-12 10:03 编辑
近日在测试钉钉OA审批集成时,在调用钉钉API接口时发现他的表格数据传输格式比较特殊,
"[[{\"name\":\"单行输入框\",\"value\":\"明细单行输入框\"},{\"name\":\"数字输入框\",\"value\":\"100\"}]]"
而活字格输出查询的json格式是这样的
"[{"编码":"001","名称":"计算机","数量":1},{"编码":"002","名称":"手机","数量":2}]"
需要转换成
[[{"name":"编码","value":"001"},{"name":"名称","value":"苹果"},{"name":"数量","value":"10"}],[{"name":"编码","value":"002"},{"name":"名称","value":"华为"},{"name":"数量","value":"20"}]]
怎么把数据表的格式转换成如上的数据格式,着实花了很长时间。百度上结果基本上是写代码的转换,自己也尝试抄了不少代码,也没有完全成功。代码实在写不下去了,于是在论坛上发了个咨询贴
https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=155164&extra=
得到了@Grayson.Shang 大佬的热心支持,在他提供的DEMO基础上,完善后终于得到了如期的结果
总结此次数据格式转换在核心就是如何使用"对象操作工具集合"提供的三条命令1创建对象2创建数组读写3追加数组项目到已有数组的功能,以及设置变量子属性。
首先我们分析下需要的结果
这个数据格式拆分为三层:结果是个对象数组对应就是数据表,中间第二层也是个对象数组对应的是数据行,第三层是个对象对应是单元格。在服务端命令中分别创建数组对象:表格、行,数组项目为空。
再创建对象:字典,同时设置二个属性:name,value。
(为什么起名字典,原因我感觉像是像是dictionary数据类型。又因为它是引用数据类型,所以只能在循环的最里层定义。开始时把它定义在开始,结果所有对象的值都是最后一个对象的值,这点在调试时花了些时间)
这里面要取出数据需要二层循环嵌套,通过第一层循环取出行数组item
再通过第二层循环取出单元格对象keys,
意外发现,取出的数据有Key\Value属性,这样给变量子属性赋值就非常方便了
keys.Key,keys.Value 分别取出键名与键值赋给字典的name、value
通过追加数组项目到已有数组,把字典追加到行,把行追加到表格。
以上这个小需求的一点总结,附上DEMO文件。再次感谢@Grayson.Shang
|
|