Вы можете легко проанализировать str
, связанный с клавишей details
, используя методы split()
и / или find()
. Go построчно, и предположим, что все слева от :
является ключом, а все справа - значением.
Например:
import json
myfile = 'sample.json'
with open(myfile, 'r') as f:
mydata = json.load(f)
for entry in mydata['response']['client_log']['data']:
parsed_details = {}
for line in entry['details'].split('\r\n'):
split = line.find(': ') # find() returns -1 if no match is found
if split != -1:
key = line[:split]
value = line[split+2:] # 2 = len(': ')
parsed_details[key] = value
entry['parsed_details'] = parsed_details
или
import json
myfile = 'sample.json'
with open(myfile, 'r') as f:
mydata = json.load(f)
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
except ValueError:
# This error is only thrown when the line doesn't have ': ' in it,
# which means there aren't enough values to unpack. It is safe to pass.
pass
entry['parsed_details'] = parsed_details
dict
, который является каждым элементом mydata['response']['client_log']['data']
list
, теперь имеет ключ parsed_details
, значение которого равно dict
с парами ключей и значений, извлеченными из details
ключ, как вы можете видеть в этом выводе:
mydata
Out[2]:
{'response': {'client_log': {'data': [{'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: 1101ar12\r\nServ Num: 11111\r\nServ Details: Super-A\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',
'parsed_details': {'Email Id': 'user1@gmail.com',
'Serv Id': '1101ar12',
'Serv Num': '11111',
'Serv Details': 'Super-A',
'State': 'LONDON',
'City': 'LONDON',
'User Name': 'John Clark',
'Mobile Number': '000111222',
'Form-1': 'zzzzz',
'Type': '111',
'Remarks': 'Remarks 123.'}},
{'city': 'SINGAPORE',
'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: 903oa112\r\nServ Num: 12345\r\nServ Details: Super-B\r\nState: Sydney\r\nCity: Sydney\r\n\r\n------Service Information------\r\n\r\nUser Name: Peter\r\nMobile Number: 333444555\r\n\r\n------Reported Form------\r\n\r\nForm-2: xxxxxxxxxx\r\nType: 111\r\n\r\nRemarks: Remarks 890.',
'log_number': '1',
'department': 'Eng',
'staff_id': 'S456',
'staff_name': 'YongG',
'timestamp': '2020-02-27 15:57:24',
'parsed_details': {'Email Id': 'user2@gmail.com',
'Serv Id': '903oa112',
'Serv Num': '12345',
'Serv Details': 'Super-B',
'State': 'Sydney',
'City': 'Sydney',
'User Name': 'Peter',
'Mobile Number': '333444555',
'Form-2': 'xxxxxxxxxx',
'Type': '111',
'Remarks': 'Remarks 890.'}}],
'query': '13'},
'response_time': '0.723494',
'transaction_id': '909122',
'transaction_status': 'OK'}}
Я не очень знаком с SQL, поэтому я не могу помочь вам с вашим последним шагом по обновлению вашей базы данных.