关于小程序云开发数据库导入错误cannot decode array into a D的解决方案

方滴云WEB2023-04-24 10:08

关于cannot decode array into a D的错误,网上已经有很多提及了,稍微查询下就不难知道这个是导入格式问题,但在小程序下,传统的办法不好使了。

问题背景

去年帮一个朋友开发了一套多店管理的CRM系统,因为主打移动办公,同时又想更好的贴合微信生态,所以首选当然就是微信小程序云开发了。

最近他那边大约有七千多条客户信息需要导入,我的第一反应就是通过云函数导入估计不靠谱,比如费用、执行超时、本地文件读取等这些问题,感觉都不太好搞。

问题产生

于是我们就在本地WEB环境中写了一个HTML,主要的功能是读取本地文件、解析并生成导入需要的数据格式,最后将它转成标准的JSON格式保存到本地。

一切都很顺利,最后生成的文件约1.4M,7000多条记录。兴高采烈的开始进行最后一步操作,使用云开发工具进行导入,于是有了如题所述的那个问题。

问题解决

其实这里要解决这个问题很简单,我们只需要将数据为中数据导出一两条观察下就没明白了。去掉标准JSON串前后的中括号,将每条记录中间的逗号变成换行符。

比如我们转换后的JSON串如下图所示,为了方便看,我们就随便提取两条数据了。

首先去掉前后的“[]",再使用拓展替换,将”},{“替换成”}\r\n{“,如下图所示,全部替换保存,数据就准备完成了。

这里用的notepad++,是的,这个软件没有了昔日的辉煌,虽然最近”绯闻“也不少,不过不影响他曾经牛逼过。这里需要注意的是,要把查找模式的扩展打开,替换完成后的数据如下。

不错,这就是我们导入时需要的数据格式,正确情况下,就可以愉快的导入了。不过也有运气不好的小伙伴,比如中文乱码了,不要慌,将其转成uft-8就可以了。

操作非常简单,全选数据 后剪切,在notepad++菜单栏找到”菜单“,选择”使用UTF-8编码“,再粘贴进去保存就可以了。

后续问题

当然对于我的工作,不是导入就完成了。原来系统中有2500条左右的数据,加上这批,大约有9000条数据,他们之间会有重复的。我们需要去重。

温馨提示:千万不要相信任何人,说他的数据不会重复,主要他自己可能都太肯定。哈哈。最简单粗暴的方法就是用EXCEL去重再导入。

因为事先朋友跟我说了,可能导入的数据会与之前的重复,所以我在导入时特意中了一个标识,这样如果出现重复,我就可以根据这个条件来删除导入的数据,同时给出日志。

这里还遇到了一个问题,云函数执行超时,默认为3s,正常情况下是没有问题,但是我们这个大数据操作显然不正常。所以您需要去云函数中去设置它。因这我这个重复量比较大,所以我还是分批处理的。

至此,所有的问题OK了。