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



我希望将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"}]

请帮忙。

给定这些数据:

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"
}
]
]

这可以通过在联机程序中结合列表和字典推导来实现:

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'}]]

最新更新