找回密码
 立即注册

QQ登录

只需一步,快速开始

赛龙周

银牌会员

103

主题

713

帖子

3256

积分

银牌会员

积分
3256

悬赏达人

赛龙周
银牌会员   /  发表于:2022-10-12 09:55  /   查看:4714  /  回复:14
本帖最后由 赛龙周 于 2022-10-12 10:03 编辑

近日在测试钉钉OA审批集成时,在调用钉钉API接口时发现他的表格数据传输格式比较特殊,
image.png649294433.png
"[[{\"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基础上,完善后终于得到了如期的结果
image.png118341673.png
总结此次数据格式转换在核心就是如何使用"对象操作工具集合"提供的三条命令1创建对象2创建数组读写3追加数组项目到已有数组的功能,以及设置变量子属性。
image.png409075621.png
首先我们分析下需要的结果
image.png197377318.png
这个数据格式拆分为三层:结果是个对象数组对应就是数据表,中间第二层也是个对象数组对应的是数据行,第三层是个对象对应是单元格。在服务端命令中分别创建数组对象:表格、行,数组项目为空。
image.png892383422.png
再创建对象:字典,同时设置二个属性:name,value。
image.png792682494.png
(为什么起名字典,原因我感觉像是像是dictionary数据类型。又因为它是引用数据类型,所以只能在循环的最里层定义。开始时把它定义在开始,结果所有对象的值都是最后一个对象的值,这点在调试时花了些时间)
image.png598386535.png
这里面要取出数据需要二层循环嵌套,通过第一层循环取出行数组item
image.png728632201.png
再通过第二层循环取出单元格对象keys,
image.png656847533.png
意外发现,取出的数据有Key\Value属性,这样给变量子属性赋值就非常方便了
image.png501857909.png
keys.Key,keys.Value 分别取出键名与键值赋给字典的name、value
image.png749750671.png
通过追加数组项目到已有数组,把字典追加到行,把行追加到表格。

以上这个小需求的一点总结,附上DEMO文件。再次感谢@Grayson.Shang

image.png201999816.png
image.png269161986.png
image.png668086547.png

JSON数据与数组转换.fgcc

974.52 KB, 下载次数: 385

评分

参与人数 2金币 +671 收起 理由
Chelsey.Wang + 666 赞一个!
Lay.Li + 5 赞一个!

查看全部评分

14 个回复

倒序浏览
renho活字格认证
银牌会员   /  发表于:2022-10-12 11:34:02
沙发
绝了,2行js不就搞定了。
回复 使用道具 举报
赛龙周
银牌会员   /  发表于:2022-10-12 12:24:48
板凳
renho 发表于 2022-10-12 11:34
绝了,2行js不就搞定了。

大佬有空分享一下您的JS代码,让我们也多学点技能
回复 使用道具 举报
15725821270悬赏达人认证 活字格认证
金牌服务用户   /  发表于:2022-10-12 12:50:19
地板
确实不用这么复杂的。。。。
回复 使用道具 举报
heroniu50
中级会员   /  发表于:2022-11-11 09:35:24
5#
也正在对接钉钉OA审批,对于不会写代码的我算是解了燃眉之急了,期待各位大佬更简便的方法
回复 使用道具 举报
137294886
金牌服务用户   /  发表于:2022-11-11 14:04:41
6#
大佬有空分享一下您的JS代码
回复 使用道具 举报
heroniu50
中级会员   /  发表于:2022-11-11 15:11:33
7#
image.png536209411.png   按照大佬的命令怎么报错呢 创建的变量keys 的值不一样
回复 使用道具 举报
赛龙周
银牌会员   /  发表于:2022-11-11 15:37:56
8#
heroniu50 发表于 2022-11-11 15:11
按照大佬的命令怎么报错呢 创建的变量keys 的值不一样

你取的keys是个字符串,用字符串分割命令,分别把值赋给name \value
回复 使用道具 举报
heroniu50
中级会员   /  发表于:2022-11-11 16:25:16
9#
赛龙周 发表于 2022-11-11 15:37
你取的keys是个字符串,用字符串分割命令,分别把值赋给name \value

大佬从数据中取出的多行数据是json格式,我从表格传参(数组)进去也是json,怎么大佬二次循环的时候得到的是数组我的是字符串呢,没有看明白……我的demo附上

2022Document (1).fgcc

847.55 KB, 下载次数: 376

回复 使用道具 举报
赛龙周
银牌会员   /  发表于:2022-11-11 17:43:46
10#
heroniu50 发表于 2022-11-11 16:25
大佬从数据中取出的多行数据是json格式,我从表格传参(数组)进去也是json,怎么大佬二次循环的时候得到 ...

稍后帮你看一下
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部