从移动客户端,我们将列表列表作为json的一部分发送到服务器(python 2.7)。这需要分成单独的列表进行处理。 示例json = {" table":" [[1,2,3],[2,3,4],....]"}
我需要的是提取单个列表[1,2,3],[2,4,5]等,在列表的开头添加一个额外的对象并将它们插入到postgres DB中。
为了提取json,我使用:
post_data = json.loads(request.data) table = post_data [' table']
打印表打印u' [[1,2,3],[2,3,4]]'。
我检查了几个问题并使用以下代码段进行处理并插入db。
tbl = post_data['table']
table = ast.literal_eval(tbl)
print table
tup_table = []
for lst in table :
lst.insert(0,userid)
tup_table += [tuple(lst)]
connection = engine.raw_connection()
cur = connection.cursor()
records_list_template = ','.join(['%s'] * len(tup_table))
insert_query = 'insert into stats(userid,rid,val,fid) values {0}'.format(records_list_template)
cur.execute(insert_query, tup_table)
connection.commit()
connection.close()
然而问题是ast.literal_eval()在这个例子中正常工作,但是当json中的列表包含其他类型的值时不起作用。例如,当列表为[[1,abc,3],[2,bcd,4]]时,它返回错误ValueError('格式错误的字符串')
我尝试过使用table.encode(' utf-8')代替。返回一个列表类型,但for循环不提取子列表,它会分别提取列表中的每个字符。
有没有更好的方法从unicode中提取列表并获取用于创建元组的子列表?
答案 0 :(得分:1)
就像您的错误消息所示,给定的json文件格式错误。你忘记了引号。
将[[1,abc,3],[2,bcd,4]]
更改为[[1,"abc",3],[2,"bcd",4]]
。