我无法解析与“details”键关联的一些字符串。 details key的值具有重复的字符串,该字符串应提取为一对key/value
这是json数据的示例
{
"response": {
"client_log": {
"data": [
{
"login": "AAAAAAAAAAAAAA",
"state": "MC",
"details": "Please find report below:\r\n\r\n------Report Information------\r\n\r\nEmail Id: user1@gmail.com\r\nServ Id: 112233\r\nProd Num: 11111\r\nProd Unit: Super-A\r\nProd Type: type-A\r\n,Serv Id: 445566\r\nProd Num: 22222\r\nProd Unit: Super-C\r\nProd Type: type-A\r\n,Serv Id: 003377\r\nProd Num: 123456\r\nProd Unit: Super-B\r\nProd Type: type-X\r\nState: LONDON\r\nCity: LONDON\r\n\r\n------Service Information------\r\n\r\nUser Name: John Clark\r\nMobile Number: 000111222\r\n\r\n------Reported Form------\r\n\r\nForm-1: zzzzz\r\nType: 111\r\n\r\nRemarks: Remarks 123.",
"log_number": "1"
},
{
"login": "BBBBBBBBBBBBB",
"state": "XX",
"details": "Please find report below:\r\n\r\n------Report Information------\r\n\r\nEmail Id: user2@gmail.com\r\nServ Id: 767878\r\nProd Num: 34689\r\nProd Unit: Super-B\r\nProd Type: type-B\r\n,Serv Id: 128900\r\nProd Num: 13689\r\nProd Unit: Super-A\r\nProd Type: type-B\r\n,Serv Id: 96333\r\nProd Num: 0011321\r\nProd Unit: Super-C\r\nProd Type: type-C\r\nState: State2\r\nCity: City2\r\n\r\n------Service Information------\r\n\r\nUser Name: Marry\r\nMobile Number: 982130989\r\n\r\n------Reported Form------\r\n\r\nForm-1: xxxxxx\r\nType: 222\r\n\r\nRemarks: Remarks 456.",
"log_number": "1"
}
],
"query": "13"
},
"response_time": "0.723494",
"transaction_id": "909122",
"transaction_status": "OK"
}
}
从上面的示例中,请参考下面的详细信息
"details": "Please find report below:\r\n\r\n------Report Information------\r\n\r\nEmail Id: user1@gmail.com\r\nServ Id: 112233\r\nProd Num: 11111\r\nProd Unit: Super-A\r\nProd Type: type-A\r\n,Serv Id: 445566\r\nProd Num: 22222\r\nProd Unit: Super-C\r\nProd Type: type-A\r\n,Serv Id: 003377\r\nProd Num: 123456\r\nProd Unit: Super-B\r\nProd Type: type-X\r\nState: LONDON\r\nCity: LONDON\r\n\r\n------Service Information------\r\n\r\nUser Name: John Clark\r\nMobile Number: 000111222\r\n\r\n------Reported Form------\r\n\r\nForm-1: zzzzz\r\nType: 111\r\n\r\nRemarks: Remarks 123.",
获得了重复的键,例如上面示例中的键“Prod Num”、“Prod Unit”和“Prod Type”,这些键出现了两次
当我读取该文件时,它没有返回“details”下所需的所有密钥…示例输出如下
{
'city': 'LONDON',
'login': 'AAAAAAAAAAAAAA',
'state': 'MC',
'details': 'Please find report below:\r\n\r\n------Report Information------\r\n\r\nEmail Id: user1@gmail.com\r\n**Serv Id: 112233\r\nProd Num: 11111\r\nProd Unit: Super-A\r\nProd Type: type-A\r\n,Serv Id: 445566\r\nProd Num: 22222\r\nProd Unit: Super-C\r\nProd Type: type-A\r\n,Serv Id: 003377\r\nProd Num: 123456\r\nProd Unit: Super-B\r\nProd Type: type-X**\r\nState: LONDON\r\nCity: LONDON\r\n\r\n------Service Information------\r\n\r\nUser Name: John Clark\r\nMobile Number: 000111222\r\n\r\n------Reported Form------\r\n\r\nForm-1: zzzzz\r\nType: 111\r\n\r\nRemarks: Remarks 123.',
'log_number': '1',
'department': 'Sales',
'staff_id': 'S123',
'staff_name': 'EricY',
'timestamp': '2020-02-27 15:57:24',
'Email_Id': 'user1@gmail.com',
'Serv_Id': '112233',
'Prod_Num': '123456',
'Prod_Unit': 'Super-B',
'Prod_Type': 'type-X',
',Serv_Id': '003377',
'State': 'LONDON',
'City': 'LONDON',
'User_Name': 'John Clark',
'Mobile_Number': '000111222',
'Form-1': 'zzzzz',
'Type': '111',
'Remarks': 'Remarks 123.'
},
如果你能从上面看到我得到的输出
'Serv_Id': '112233' , 'Prod_Num': '123456', 'Prod_Unit': 'Super-B', 'Prod_Type': 'type-X' and ',Serv_Id': '003377'
由于相同的键,它将用最后/最新的值替换每个键的值。。。在这种情况下,根据以下值……替换先前的值
Prod Num: 123456, Prod Unit: Super-B and Prod Type: type-X after key ',Serv_Id': '003377'
我想这是由于钥匙的重复。有些词典也有不止一个“Serv_Id”键。。。这意味着字典列表中会有更多重复的Prod Num、Prod Unit和Prod Type,不能作为密钥对正确读取。相同的键将替换为最新的值
如何克服这个重复的关键?可能需要将密钥名称更改为不同的名称以使其唯一
我希望输出如下
{
'city': 'LONDON',
'login': 'AAAAAAAAAAAAAA',
'state': 'MC',
'details': 'Please find report below:\r\n\r\n------Report Information------\r\n\r\nEmail Id: user1@gmail.com\r\nServ Id: 112233\r\nProd Num: 11111\r\nProd Unit: Super-A\r\nProd Type: type-A\r\n,Serv Id: 445566\r\nProd Num: 22222\r\nProd Unit: Super-C\r\nProd Type: type-A\r\n,Serv Id: 003377\r\nProd Num: 123456\r\nProd Unit: Super-B\r\nProd Type: type-X\r\nState: LONDON\r\nCity: LONDON\r\n\r\n------Service Information------\r\n\r\nUser Name: John Clark\r\nMobile Number: 000111222\r\n\r\n------Reported Form------\r\n\r\nForm-1: zzzzz\r\nType: 111\r\n\r\nRemarks: Remarks 123.',
'log_number': '1',
'department': 'Sales',
'staff_id': 'S123',
'staff_name': 'EricY',
'timestamp': '2020-02-27 15:57:24',
'Email_Id': 'user1@gmail.com',
'Serv_Id': '112233', ------>1st Serv_Id
'Prod_Num_1': '111111',--->1st prod_num with new keyname
'Prod_Unit_1': 'Super-A', --->1st prod_unit with new keyname
'Prod_Type_1': 'type-A', --->1st prod_type with new keyname
',Serv_Id': '003377',------>2nd Serv_Id with new keyname
'Prod_Num_2': '123456',--->2nd prod_num with new keyname
'Prod_Unit_2': 'Super-B', --->2nd prod_unit with new keyname
'Prod_Type_2: 'type-X', ---> 2nd prod_type with new keyname
'State': 'LONDON',
'City': 'LONDON',
'User_Name': 'John Clark',
'Mobile_Number': '000111222',
'Form-1': 'zzzzz',
'Type': '111',
'Remarks': 'Remarks 123.'
},
***The ',Serv_Id' key can be more than one. ***
下面是我用来读取文件并将“细节”提取到密钥对的脚本
for entry in mydata['response']['client_log']['data']:
parsed_details = {}
for line in entry['details'].split('\r\n'):
try:
key, value = line.split(': ', maxsplit=1)
parsed_details[key] = value
parsed_details = { x.translate({32:'_'}) : y
for x, y in parsed_details.items()}
except ValueError:
pass
entry.update(parsed_details)
我感谢你在这件事上的帮助。请引导我。多谢各位
编辑:我昨晚写得很晚,回来做了一些编辑
在本例中,您可以使用一些简单的字符串操作来完成希望完成的操作。我对您的原始代码进行了一些编辑,并强调了代码注释中的差异
相关问题 更多 >
编程相关推荐