将列表的Json数组转换为带有键值对的Json数组

2024-10-01 00:34:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望将带有数组的json转换为带有键值对的json数组

以下是我的格式。 索引0有三个列表数组,其中包含不同的值。 索引0的值应该在一个数组中表示,每个列表的json不同,作为键值对,如下所示

范例

{'0': ['ID:123,qty:2,name:zbc',
      'ID:234,qty:3,name:xyz',
      'ID:456,qty:6,name:opq']}

转化为

[{"ID":"123","qty":"2","name":"zbc"},{"ID":"234","qty":"3","name":"xyz"}{"ID":"456","qty":"6","name":"opq"}]

整个数据如下所示

{'0': ['ID:123,qty:2,name:zbc',
      'ID:234,qty:3,name:xyz',
      'ID:456,qty:6,name:opq']
'1':['ID:666,qty:2,name:ppp',
    'ID:322,qty:5,name:uuu'],
'2' : ['ID:333,qty:3,name:pqr',
      'ID:444,qty:5,name:mmm',
     'ID:555,qty:6,name:iii']
 }

转换为以下格式:

[{"ID":"123","qty":"2","name":"zbc"}, 
 {"ID":"234","qty":"3","name":"xyz"}, 
 {"ID":"456","qty":"6","name":"opq"}]
 
[{"ID":"666","qty":"2","name":"ppp"}, 
 {"ID":"322","qty":"5","name":"uuu"}]

[ {"ID":"333","qty":"3","name":"pqr"}, 
  {"ID":"444","qty":"5","name":"mmm"}, 
  {"ID":"555","qty":"6","name":"iii"}]

请帮忙


Tags: nameidjson列表格式数组uuu键值
3条回答

这可以通过在一行中结合列表和词典理解来实现:

data = {'0': ['ID:123,qty:2,name:zbc',
      'ID:234,qty:3,name:xyz',
      'ID:456,qty:6,name:opq'],
'1':['ID:666,qty:2,name:ppp',
    'ID:322,qty:5,name:uuu'],
'2' : ['ID:333,qty:3,name:pqr',
      'ID:444,qty:5,name:mmm',
     'ID:555,qty:6,name:iii']
 }

[[{x.split(':')[0]:x.split(':')[1] for x in i.split(',')} for i in item] for item in data.values()]

输出:

[[{'ID': '123', 'qty': '2', 'name': 'zbc'},
  {'ID': '234', 'qty': '3', 'name': 'xyz'},
  {'ID': '456', 'qty': '6', 'name': 'opq'}],
 [{'ID': '666', 'qty': '2', 'name': 'ppp'},
  {'ID': '322', 'qty': '5', 'name': 'uuu'}],
 [{'ID': '333', 'qty': '3', 'name': 'pqr'},
  {'ID': '444', 'qty': '5', 'name': 'mmm'},
  {'ID': '555', 'qty': '6', 'name': 'iii'}]]

鉴于这些数据:

data = {
    '0': [
        'ID:123,qty:2,name:zbc',
        'ID:234,qty:3,name:xyz',
        'ID:456,qty:6,name:opq'
    ],
    '1': [
        'ID:666,qty:2,name:ppp',
        'ID:322,qty:5,name:uuu'
    ],
    '2' : [
        'ID:333,qty:3,name:pqr',
        'ID:444,qty:5,name:mmm',
        'ID:555,qty:6,name:iii'
    ]
}

解决方案1:

通过逗号,分割每个字符串以获得每个键值对,然后通过:提取键部分和值部分

data_list = []

for text_list in data.values():
    current_list = []
    for text in text_list:
        text_dict = {}
        for split in text.split(','):
            key, _, value = split.partition(':')
            text_dict[key] = value
        current_list.append(text_dict)
    data_list.append(current_list)

print(data_list)

解决方案2:

使用正则表达式将每个字符串转换为字典格式。然后使用ast.literal_eval()将其转换为dict

import ast
import re

key_value_re = re.compile(r"(\w+):(\w+)")
data_list = [
    [
        ast.literal_eval("{" + key_value_re.sub(r'"\1":"\2"', text) + "}")
        for text in text_list
    ]
    for text_list in data.values()
]

print(data_list)

输出(两种解决方案):

[
    [
        {
            "ID": "123",
            "qty": "2",
            "name": "zbc"
        },
        {
            "ID": "234",
            "qty": "3",
            "name": "xyz"
        },
        {
            "ID": "456",
            "qty": "6",
            "name": "opq"
        }
    ],
    [
        {
            "ID": "666",
            "qty": "2",
            "name": "ppp"
        },
        {
            "ID": "322",
            "qty": "5",
            "name": "uuu"
        }
    ],
    [
        {
            "ID": "333",
            "qty": "3",
            "name": "pqr"
        },
        {
            "ID": "444",
            "qty": "5",
            "name": "mmm"
        },
        {
            "ID": "555",
            "qty": "6",
            "name": "iii"
        }
    ]
]

试试这个:

dct = {
 '0': ['ID:123,qty:2,name:zbc',
       'ID:234,qty:3,name:xyz',
       'ID:456,qty:6,name:opq'],
 '1': ['ID:666,qty:2,name:ppp',
       'ID:322,qty:5,name:uuu'],
 '2': ['ID:333,qty:3,name:pqr',
       'ID:444,qty:5,name:mmm',
       'ID:555,qty:6,name:iii']
 }

for k,v in dct.items():
    lst = []
    for s in v:
        d = {i.split(':')[0] : i.split(':')[1]  for i in s.split(',')}
        lst.append(d)
    print(lst)

输出:

[{'ID': '123', 'qty': '2', 'name': 'zbc'}, 
 {'ID': '234', 'qty': '3', 'name': 'xyz'}, 
 {'ID': '456', 'qty': '6', 'name': 'opq'}]
[{'ID': '666', 'qty': '2', 'name': 'ppp'}, 
 {'ID': '322', 'qty': '5', 'name': 'uuu'}]
[{'ID': '333', 'qty': '3', 'name': 'pqr'}, 
 {'ID': '444', 'qty': '5', 'name': 'mmm'}, 
 {'ID': '555', 'qty': '6', 'name': 'iii'}]

相关问题 更多 >