如何在json对象数组中获取特定值并将其保存到var中

时间:2019-03-26 15:08:21

标签: python json

我有一些代码正在从数据库中选择一些数据。

它返回一个列表:

selects = [(2, '4'), (2, '17'), (3, '65'), (1, '54'), (2, '14'),...]

我想将此列表转换为JSON对象,所以我这样做:

selects = json.dumps(selects)

给我这样的值:

[[2, "4"], [2, "17"], [3, "65"], [1, "54"], [2, "14"], ...]

在那之后,我想编写一个for循环以获取字典的每个对象并保存到var中。例如:

[[2, "4"]]
var1 = 2
var2 = "4"

但是我在提取所需的值时遇到了问题。当我尝试var = json[0]时,它只会返回[

我的想法是制作一个for以考虑json中的所有对象,然后将它们保存到var中,然后发送给另一个进程...

如何保存上面的示例中的值?

这是我正在使用的代码:

import json

class Pull():
    def process(self, **kwargs):
        data     = kwargs.get('data')
        client   = kwargs.get('client')
        postgres = kwargs.get('postgres')

        selects = postgres.select(data_type='session')
        selects = json.dumps(selects)

        for select in selects:
            var1 = select[0]
            var2 = select[1]
            sessions = client.get_sessions(city=var1, cinema=var2)

3 个答案:

答案 0 :(得分:1)

这是两天来第三次json.dumps被无故使用。...selects已经是列表 / 词典,则无需将其传递给返回 string json.dumps(因此select[0] no不会返回第一个字符)。

删除行selects = json.dumps(selects)

答案 1 :(得分:1)

selects = json.dumps(selects)是一个字符串。进行selects[0]给出第一个字符。

您不想将数据序列化为JSON来处理它们。保持数据的真实状态,并将其视为python列表。

答案 2 :(得分:1)

这里混淆的一部分是术语,一部分是不必要的复杂性。两者都可以解决。

您拥有的JSON对象不是字典。它是一个字符串,包含嵌套列表的序列化表示。正如您所期望的,从字符串开始,select[0]是字符串的第一个字符,select[1]是字符串的第二个字符,等等。

序列化时,无论是JSON还是其他格式,都可以发送或记录。 JSON数据无意用作数据。如果您需要实际的列表,则可以使用原始的,未序列化的表单:

selects = postgres.select(data_type='session')

for select in selects:
    var1 = select[0]
    var2 = select[1]
    sessions = client.get_sessions(city=var1, cinema=var2)