技术标签: python操作微信小程序云端数据库
小程序新增了云开发功能,对于个人开发者是个利好消息。可以省去购买服务器,购买域名以及繁琐配置等步骤,减轻了开发者的负担。至于如何云开发我就不在这里赘述了,请移步微信小程序云开发官方文档,说的很清楚。
这篇文章主要跟大家聊一次云开发上传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。
图1-云开发数据库模块
有人会说上传json有什么好聊的,如果单单只是上传json文件确实没什么好讲的,但是我们不做处理上传是会报错的。
首先看下官方说明。
图2-文件格式
什么意思呢?也就是每条数据应该用花括号{}包裹着,花括号里是键值对。假如root首层是方括号[]形式的数据包裹着的是不行的。上传是会报错。为了让大家更直观的了解,我们分析下数据结构。
[
{
"name":"小明",
"age":"18",
"sex":"男"
},
{
"name":"小红",
"age":"19",
"sex":"女"
},
{
"name":"小黑",
"age":"20",
"sex":"男"
},
...
]
像这种数据结构,数组里面每组数据都是一个字典键值对,按照上图的规则,我们只需要首先删除首尾的这组方括号[],然后替换每组花括号{}后面的逗号,就行了。数据少我们可以手动删除,数据多了几百上千条数据,手动删除肯定不现实。window电脑可以用记事本,mac电脑可以用文本编辑打开,然后用查找替换的方式删除每组数据后的逗号。
图3-打开json文件
因为json数据结构的特殊,不是只有每组数据间用逗号隔开,每组数据的每个键值对也是用逗号隔开的,所以我们不能直接把逗号替换为空格,而是应该把结束花括号和逗号一起替换为结束花括号"}"。
图4-查找替换前
图4-替换后
这种数据处理只适合上图这种数据结构,假如有多层数组嵌套就不适应了,因为我们的目的是只替换最外层每组数据间的逗号而这样会破坏里层的数据结构,导致出错。
下篇文章我会写一篇用官方控件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文件可以看到清楚的数据分层结构:
图5-plist文件可视化结构
把plist文件用Xcode在iOS项目中打开,鼠标右击要打开的文件、选择Open As、点击Source Code(如你的mac安装了sublime也可以直接用它打开就直接显示为代码形式了)。
图6-Xcode中用代码形式打开
图7-Source Code形式打开后
用代码形式打开后是类似于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也一并附上 。
上面只是我的个人经验,希望能帮到有需要的朋友,谢谢。
文章浏览阅读3.6k次。需求背景EasyDarwin开发团队维护EasyDarwin开源流媒体服务器也已经很多年了,之前也陆陆续续尝试过很多种服务端录像的方案,有:在EasyDarwin中直接解析收到的RTP包,重新组包录像;也有:在EasyDarwin中新增一个RecordModule,再以RTSPClient的方式请求127.0.0.1自己的直播流录像,但这些始终都没有成气候;我们的想法是能够让整套EasyDarwin_开源录播系统
文章浏览阅读1.1w次。今天碰到一个执行语句等了半天没有执行:delete table XXX where ......,但是在select 的时候没问题。后来发现是在执行select * from XXX for update 的时候没有commit,oracle将该记录锁住了。可以通过以下办法解决: 先查询锁定记录 Sql代码 SELECT s.sid, s.seri_oracle delete update 锁表问题
文章浏览阅读3.4k次。报错信息error:Undefined symbol: typeinfo for sdk::IConfigUndefined symbol: vtable for sdk::IConfig具体信息:Undefined symbols for architecture x86_64: "typeinfo for sdk::IConfig", referenced from: typeinfo for sdk::ConfigImpl in sdk.a(config_impl.o) _xcode undefined symbols:
文章浏览阅读249次。背景《承接上文,项目05(Mysql升级06Mysql5.6.51升级到Mysql5.7.32)》,写在前面需要(考虑)检查和测试的层面很多,不限于以下内容。参考文档https://dev.mysql.com/doc/refman/8.0/en/upgrade-prerequisites.htmllink推荐阅读以上链接,因为对应以下问题,有详细的建议。官方文档:不得存在以下问题:0.不得有使用过时数据类型或功能的表。不支持就地升级到MySQL 8.0,如果表包含在预5.6.4格_mysql8.0.26 升级32
文章浏览阅读3.7k次。一.安装基本环境工具:1.安装git工具sudo apt install wget g++ git2.检查并安装java等环境工具2.1、执行下面安装命令#!/bin/bashsudoapt-get-yinstall--upgraderarunrarsudoapt-get-yinstall--upgradepython-pippython3-pip#aliyunsudoapt-get-yinstall--upgradeopenjdk..._高通8155 qnx 源码
文章浏览阅读461次。firebase 与谷歌 大多数开发人员都听说过Google的Firebase产品。 这就是Google所说的“ 移动平台,可帮助您快速开发高质量的应用程序并发展业务。 ”。 它基本上是大多数开发人员在构建应用程序时所需的一组工具。 在本文中,我将介绍这些工具,并指出您选择使用Firebase时需要了解的所有内容。 在开始之前,我需要说的是,我不会详细介绍Firebase提供的所有工具。 我..._firsebase 与 google
文章浏览阅读1.2k次。在容器化应用中,每个环境都要独立的打一个镜像再给镜像一个特有的tag,这很麻烦,这就要用到k8s原生的配置中心configMap就是用解决这个问题的。使用configMap部署应用。这里使用nginx来做示例,简单粗暴。直接用vim常见nginx的配置文件,用命令导入进去kubectl create cm nginx.conf --from-file=/home/nginx.conf然后查看kub..._pod mount目录会自动创建吗
文章浏览阅读169次。随着互联网技术的发发展,计算机技术广泛应用在人们的生活中,逐渐成为日常工作、生活不可或缺的工具,高校各种管理系统层出不穷。高校作为学习知识和技术的高等学府,信息技术更加的成熟,为新生报到管理开发必要的系统,能够有效的提升管理效率。一直以来,新生报到一直没有进行系统化的管理,学生无法准确查询学院信息,高校也无法记录新生报名情况,由此提出开发基于微服务的分布式新生报到系统,管理报名信息,学生可以在线查询报名状态,节省时间,提高效率。_关于spring cloud的参考文献有啥
文章浏览阅读3.2k次。Public MustInherit Class Contact '只能作基类且不能实例化 Private mID As Guid = Guid.NewGuid Private mName As String Public Property ID() As Guid Get Return mID End Get_vb.net 继承多个接口
文章浏览阅读1.7k次。1.美图# 2.概述因为要上传我的所有仓库的包,希望nexus中已有的包,我不覆盖,没有的添加。所以想批量上传jar。3.方案1-脚本批量上传PS:nexus3.x版本只能通过脚本上传3.1 批量放入jar在mac目录下,新建一个文件夹repo,批量放入我们需要的本地库文件夹,并对文件夹授权(base) lcc@lcc nexus-3.22.0-02$ mkdir repo2..._nexus3 批量上传jar包 java代码
文章浏览阅读6.6k次,点赞6次,收藏30次。本文转自http://blog.csdn.net/charleslei/article/details/486519531、什么是场在介绍Deinterlacer去隔行处理的方法之前,我们有必要提一下关于交错场和去隔行处理的基本知识。那么什么是场呢,场存在于隔行扫描记录的视频中,隔行扫描视频的每帧画面均包含两个场,每一个场又分别含有该帧画面的奇数行扫描线或偶数行扫描线信息,_mipi去隔行
文章浏览阅读1.7k次。DATA L_ENDDA TYPE SY-DATUM. IF P_DATE IS INITIAL. CONCATENATE SY-DATUM(4) '1231' INTO L_ENDDA. ELSE. CONCATENATE P_DATE(4) '1231' INTO L_ENDDA. ENDIF. DATA: LV_RESET(1) TY_abap 自定义 search help