【问题标题】:how to extract a list of lists (containing any value type) from json如何从json中提取列表列表(包含任何值类型)
【发布时间】: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


    【解决方案1】:

    如您的错误消息所示,给定的 json 文件格式不正确。你忘记了引号。

    [[1,abc,3],[2,bcd,4]] 更改为[[1,"abc",3],[2,"bcd",4]]

    【讨论】:

    • 愚蠢的后续问题。我实际上曾尝试过这样做。由于我使用邮递员客户端对其进行测试,因此不允许我在双引号中添加双引号字符串。我如何在邮递员中做到这一点?
    • 您必须通过在字符串中的引号前插入反斜杠来转义引号 (\")
    • 我正在尝试 \\\" 这在另一个论坛中被建议但从未奏效:它有效!! ast.literal_val 是最好的方法吗,它适用于所有类型的字符串/文本(包括单引号、双引号、\n等)?
    猜你喜欢
    • 2020-09-10
    • 1970-01-01
    • 2013-09-19
    • 2015-09-21
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    相关资源
    最近更新 更多