【发布时间】:2016-01-28 13:32:05
【问题描述】:
从移动客户端,我们将列表列表作为 json 的一部分发送到服务器(python 2.7)。这需要分成单独的列表进行处理。 示例 json = {"table":"[[1,2,3],[2,3,4],....]"}
我需要提取单个列表 [1,2,3],[2,4,5] 等,在列表的开头添加一个额外的对象并将它们插入到 postgres 数据库中。
为了提取我使用的 json:
post_data = json.loads(request.data) table = post_data['table']
打印表打印 u'[[1,2,3],[2,3,4]]'。
我检查了几个问题,并使用以下 sn-p 进行处理并插入到数据库中。
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('malformed string')
我尝试使用 table.encode('utf-8') 代替。这会返回一个列表类型,但 for 循环不会提取子列表,它会分别提取列表中的每个字符。
有没有更好的方法从 unicode 中提取列表并获取子列表以创建元组?
【问题讨论】:
标签: python json list postgresql