python批量生成json数据并解决微信小程序导入json数据出错问题

前言

微信小程序云开发数据库提供了从本地导入本地json数据的功能,因此当数据量很大的时候我们可以在本地用python批量生成json数据,然后再上传至云开发数据库中

一、python数据处理

1.思路

使用xlrd读取本地数据,获取需要的数据,生成记录列表,最后导入到一个txt中,最后再将生成的txt转成json

为什么不直接生成json,额,因为云开发的数据导出时,每一条记录就是一条单独的json数据,因此导入时要保持一致

【云开发控制台导出的数据】
在这里插入图片描述
批量生成数据的python代码:

import xlrd

filename = '(副本)2021-2022-1物理实验学生名单2021.10.8.xlsx'
workbook = xlrd.open_workbook(filename)
sheet1 = workbook.sheets()[0]
print(sheet1.nrows)

students_exp_data = []  # 学生实验数据表
studentInfo = []  # 学生信息表
expData = {"_C101": {"data": [], "submitCount": 5.0}, "_C103": {"data": [], "submitCount": 5.0},
           "_C203": {"data": [], "submitCount": 5.0}, "_A102": {"data": [], "submitCount": 5.0},
           "_A202": {"data": [], "submitCount": 5.0}, "_A204": {"data": [], "submitCount": 5.0},
           "_A302": {"data": [], "submitCount": 5.0}, "_A304": {"data": [], "submitCount": 5.0},
           "_C301": {"data": [], "submitCount": 5.0}, "_C303": {"data": [], "submitCount": 5.0}}
for i in range(sheet1.nrows):
    if i == 0:
        pass
    else:
        data_lst = sheet1.row_values(i, start_colx=0, end_colx=None)
        temp = {'_id': str(i - 1), 'studentNumber': str(data_lst[5]).split('.')[0], 'studentName': data_lst[6], "expData": expData}
        students_exp_data.append(temp)

print(students_exp_data)
# 将students_exp_data写入到text中
f = open("students_exp_data1.txt", 'w')  # 读取label.txt文件,没有则创建,‘a’表示再次写入时不覆盖之前的内容
for i in students_exp_data:
    f.write(str(i))
    f.write('\n')  # 实现换行的功能
f.close()

代码不多,就30行左右

2.生成的数据:

在这里插入图片描述
生成的数据可能会有乱码,按编译器的提示去修改即可
如果按以上方式修改编码之后输出控制出现乱码,则可以按照以下方式去修改
解决 Pycharm 输出信息中文乱码问题(我用的编译器是Pycharm)

3.将txt数据转成json

直接修改文件的后缀名即可
导出时记得选择UTF-8编码

二、导入到云开发控制台

导入到云开发数据库时出错了
在这里插入图片描述

报错信息:

导入数据库失败, Error: Poll error, 导入数据任务(id:1986822)异常,错误信息:invalid JSON input

主要问题:

json数据格式不对
在这里插入图片描述

对比云开发控制台中导出的数据发现,json数据中的每一个字段和字符串应该是英文的双引号,而不是单引号,这也是json数据的基本格式要求。

于是修改python代码如下:

import json
import xlrd

filename = '(副本)2021-2022-1物理实验学生名单2021.10.8.xlsx'
workbook = xlrd.open_workbook(filename)
sheet1 = workbook.sheets()[0]
print(sheet1.nrows)

students_exp_data = []  # 学生实验数据表
studentInfo = []  # 学生信息表
expData = {"_C101": {"data": [], "submitCount": 5.0}, "_C103": {"data": [], "submitCount": 5.0},
           "_C203": {"data": [], "submitCount": 5.0}, "_A102": {"data": [], "submitCount": 5.0},
           "_A202": {"data": [], "submitCount": 5.0}, "_A204": {"data": [], "submitCount": 5.0},
           "_A302": {"data": [], "submitCount": 5.0}, "_A304": {"data": [], "submitCount": 5.0},
           "_C301": {"data": [], "submitCount": 5.0}, "_C303": {"data": [], "submitCount": 5.0}}
for i in range(sheet1.nrows):
    if i == 0:
        pass
    else:
        data_lst = sheet1.row_values(i, start_colx=0, end_colx=None)
        temp = {'_id': str(i - 1), 'studentNumber': str(data_lst[5]).split('.')[0], 'studentName': data_lst[6], "expData": expData}
        students_exp_data.append(json.dumps(temp, ensure_ascii=False))  # 这里的json.dumps方法中要加入ensure_ascii=False,否则生成的txt中会出现乱码

print(students_exp_data)
# 将students_exp_data写入到text中
f = open("students_exp_data1.txt", 'w')  # 读取label.txt文件,没有则创建,‘a’表示再次写入时不覆盖之前的内容
for i in students_exp_data:
    f.write(str(i))
    f.write('\n')  # 实现换行的功能
f.close()

处理后的json数据在这里插入图片描述

处理过后导入成功
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值