python-3.x 遍历JSON数组

egdjgwm8  于 2023-07-01  发布在  Python
关注(0)|答案(1)|浏览(142)

我有下面的JSON数组;

"json_array": [
    {
        "key": "k1",
        "value": "v1"
    },
    {
        "key": "k2",
        "value": "v2"
    }
]

需要将值列为v1、v2。
目前,我可以分别列出键和值,如下所示,但作为一个整体,而不是单独列出:
k1:v1 k2:v2

k1 k2

v1 v2
我试着得到这样的东西:但我不确定如何进行迭代,比如我只需要打印一个值,要么是v1,要么是v2。如果有人能帮我解决Python 3中的逻辑问题,那就太好了。
编辑代码:

json_array = [
    [
        {
            "key": "k1",
            "value": "v1"
        },
        {
            "key": "k1",
            "value": "v2"
        }
    ],
    [
        {
            "key": "k1",
            "value": "v3"
        },
        {
            "key": "k2",
            "value": "v4"
        }
    ],
    [
        {
            "key": "k2",
            "value": "v5"
        },
        {
            "key": "k3",
            "value": "v6"
        }
    ]
]
itemcount = 0

for item in json_array:
    print(item)
    values = []
    
    for kv in item:
        if 'value' in kv:
                values.append(kv['value'])

    print(', '.join([kv['key']] + values))

输出:

[{'key': 'k1', 'value': 'v1'}, {'key': 'k1', 'value': 'v2'}]
k1, v1, v2
[{'key': 'k1', 'value': 'v3'}, {'key': 'k2', 'value': 'v4'}]
k2, v3, v4
[{'key': 'k2', 'value': 'v5'}, {'key': 'k3', 'value': 'v6'}]
k3, v5, v6

预期输出:

k1, v1, v2, v3
k2, v4, v5
k3, v6
h22fl7wq

h22fl7wq1#

你可以这样做:

json_array = [
    {
        "key": "k1",
        "value": "v1"
    },
    {
        "key": "k2",
        "value": "v2"
    }
]

itemcount = 0
values = []

for item in json_array:
    print(f'Item => {itemcount}')
    itemcount += 1
    
    if 'value' in item:
            print(f"Value => {item['value']}")
            values.append(item['value'])

print(', '.join(values))

这会给予你这样的输出:

Item => 0
Value => v1
Item => 1
Value => v2
v1, v2

如果你只想输出v1, v2,你可以这样做:

values = []

for item in json_array:
    if 'value' in item:
            values.append(item['value'])

print(', '.join(values))

我们在这里做什么?**
我们循环遍历列表中的每一项。每一个条目都是一本字典。我们询问字典是否具有'value'属性。如果有,我们将其添加到列表中。
最后,我们用','分隔符连接列表。
您可以将其变形为您想要的任何输出。希望这能让你开始。

编辑

如果你有一个嵌套的列表/数组怎么办?

json_array = [
    [
        {
            "key": "k1",
            "value": "v1"
        },
        {
            "key": "k2",
            "value": "v2"
        }
    ],
    [
        {
            "key": "k1",
            "value": "v3"
        },
        {
            "key": "k2",
            "value": "v4"
        }
    ]
]
itemcount = 0
values = []

for item in json_array:
    print(f'Item => {itemcount}')
    itemcount += 1
    
    for kv in item:
        if 'value' in kv:
                print(f"Value => {kv['value']}")
                values.append(kv['value'])

print(', '.join(values))

结果将是:

Item => 0
Value => v1
Value => v2
Item => 1
Value => v3
Value => v4
v1, v2, v3, v4

编辑2

如果一行需要v1、v2,另一行需要v3、v4

您可以使用稍微修改的代码在一行中打印v1、v2,在另一行中打印v3、v4。

json_array = [
    [
        {
            "key": "k1",
            "value": "v1"
        },
        {
            "key": "k2",
            "value": "v2"
        }
    ],
    [
        {
            "key": "k1",
            "value": "v3"
        },
        {
            "key": "k2",
            "value": "v4"
        }
    ]
]
itemcount = 0

for item in json_array:
    print(f'Item => {itemcount}')
    itemcount += 1
    
    values = []
    
    for kv in item:
        if 'value' in kv:
                print(f"Value => {kv['value']}")
                values.append(kv['value'])

    print(', '.join(values))

结果将是:

Item => 0
Value => v1
Value => v2
v1, v2
Item => 1
Value => v3
Value => v4
v3, v4

看来楼主已经想通了;干得好。

编辑3

如果我们想要key,value 1,value 2,...?

json_array = [
    [
        {
            "key": "k1",
            "value": "v1"
        },
        {
            "key": "k1",
            "value": "v2"
        }
    ],
    [
        {
            "key": "k1",
            "value": "v3"
        },
        {
            "key": "k2",
            "value": "v4"
        }
    ],
    [
        {
            "key": "k2",
            "value": "v5"
        },
        {
            "key": "k3",
            "value": "v6"
        }
    ]
]
itemcount = 0
values = {}

for item in json_array:
    itemcount += 1
    
    for kv in item:
        if kv['key'] not in values:
            values[kv['key']] = []
        
        values[kv['key']].append(kv['value'])
        
for key in values:
    print(key + ', ' + ', '.join(values[key]))

将导致:

k1, v1, v2, v3
k2, v4, v5
k3, v6

相关问题