小程序新增了云开发功能,对于个人开发者是个利好消息。可以省去购买服务器,购买域名以及繁琐配置等步骤,减轻了开发者的负担。至于如何云开发我就不在这里赘述了,请移步微信小程序云开发官方文档,说的很清楚。
这篇文章主要跟大家聊一次云开发上传json文件遇到的坑。
小程序官方为我们提供了官方API进行数据库操作上传数据,也为我们提供了手动后台上传数据文件的功能。
- 代码方式插入数据
//初始化
wx.cloud.init({
env: '这里填数据库环境,类型为字符串'
})
const db = wx.cloud.database()
//插入单条数据
db.collection('cityInfo').add({
// data 字段表示需新增的 JSON 数据
data: {
name: "小明",
sex: "man",
age: "18",
},
success: function (res) {
// res 是一个对象,其中有 _id 字段标记刚创建的记录的 id
console.log(res)
}
})
至于批量插入数据官方文档没有说,如果按后台数据库插入的逻辑,一般小批量可以用循环,大量数据得用事务处理了。所以用上面用代码上传的方法显然麻烦且不高效。好在官方为我们提供手动上传文件的方法。
- 后台手动上传文件
点击开发者工具模拟器右上角的“云开发”按钮进入云开发后台,然后点击数据库,添加集合(创建表名)。创建好后可以点击“+添加记录”,添加单条记录。也可以点击旁边的“+导入”,导入json后缀的文件也可以是CSV表格数据的文件。做过后台和移动端的都比较熟悉json,这里我们讲下怎么上传json。
有人会说上传json有什么好聊的,如果单单只是上传json文件确实没什么好讲的,但是我们不做处理上传是会报错的。
首先看下官方说明。
什么意思呢?也就是每条数据应该用花括号{}包裹着,花括号里是键值对。假如root首层是方括号[]形式的数据包裹着的是不行的。上传是会报错。为了让大家更直观的了解,我们分析下数据结构。
[
{
"name":"小明",
"age":"18",
"sex":"男"
},
{
"name":"小红",
"age":"19",
"sex":"女"
},
{
"name":"小黑",
"age":"20",
"sex":"男"
},
...
]
像这种数据结构,数组里面每组数据都是一个字典键值对,按照上图的规则,我们只需要首先删除首尾的这组方括号[],然后替换每组花括号{}后面的逗号,就行了。数据少我们可以手动删除,数据多了几百上千条数据,手动删除肯定不现实。window电脑可以用记事本,mac电脑可以用文本编辑打开,然后用查找替换的方式删除每组数据后的逗号。
因为json数据结构的特殊,不是只有每组数据间用逗号隔开,每组数据的每个键值对也是用逗号隔开的,所以我们不能直接把逗号替换为空格,而是应该把结束花括号和逗号一起替换为结束花括号"}"。
这种数据处理只适合上图这种数据结构,假如有多层数组嵌套就不适应了,因为我们的目的是只替换最外层每组数据间的逗号而这样会破坏里层的数据结构,导致出错。
下篇文章我会写一篇用官方控件picker实现省市区三级联动的文章,会用到多层数组嵌套。我是直接把整个json文件里的数据作为一组数据上传的,一次请求所有数据,返回所有数据后在小程序里处理。这样做的好处只要一次请求就能得到所有数据,缺点就是数据量大的话耗时操作是有高延迟的,不能想第一种数据结构一样上传到云数据库后是一条一条的数据可以用SQL语句条件查询。
[
{
"citys":[
{
"areas":[
{
"code":"440303",
"name":"罗湖区"
},
{
"code":"440304",
"name":"福田区"
},
...
],
"code":"440300",
"name":"深圳市"
},
...
],
"code":"440000",
"name":"广东省"
},
...
]
这种数据结构显然不好去替换,应该在存数据的时候处理好。如果你要上传整个json文件为一组数据,这样直接上传也是不对的,还是那个规则要在数组外包裹一层花括号{},比如这样:
{
"data":[
{
"citys":[
{
"areas":[
{
"code":"440303",
"name":"罗湖区"
},
{
"code":"440304",
"name":"福田区"
},
...
],
"code":"440300",
"name":"深圳市"
},
...
],
"code":"440000",
"name":"广东省"
},
...
]
}
处理完后就可以在云开发后台上传json文件了。
下面介绍一种.plist文件转json的方法,因为很多写iOS程序的项目里可能有现成的plist文件数据,但是小程序不支持plist文件的上传,所以我们要转换一下。
双击plist文件可以看到清楚的数据分层结构:
把plist文件用Xcode在iOS项目中打开,鼠标右击要打开的文件、选择Open As、点击Source Code(如你的mac安装了sublime也可以直接用它打开就直接显示为代码形式了)。
用代码形式打开后是类似于xml形式的节点树形结构,我们Com + A、Com + C全选复制它们,然后打开http://json2plist.sinaapp.com/,这是一个plist和json互转的工具网站,打开后选择顶部的“Plist -> JSON ”,然后把复制的plist代码粘贴在输入框中,点击“Convert”按钮,等待一会就完成plist转json的工作了。复制json代码,把其粘贴在新建的json文件中,按小程序的格式要求做一些相应处理后保存,就可以上传到小程序云开发后台了。
下面附上处理后的json数据cityDataArr.json,直接上传到云数据库即可。
未处理的plist文件cityDataArr.plist也一并附上 。
上面只是我的个人经验,希望能帮到有需要的朋友,谢谢。