Как преобразовать пост в Json - Django
Я пытаюсь преобразовать данные из поста в сформированный Json.
Но я все еще не добился успеха.
Я пытался сделать в этом формате
К сожалению, я не смог ничего придумать.
Может ли кто-нибудь помочь?
Пост
{'csrfmiddlewaretoken': 'AdbaFrsoWeZTnT07m3VjncmYnYHztaQ214qh8AYH2cI40veXfe0dmfSwkI1o2ma1',
'det[0][CNPJ]': '8768678678678',
'det[0][UF]': 'SP',
'det[0][dhEmi]': '2021-07-13T08:26:30-03:00',
'det[0][nNF]': '8267',
'det[0][xNome]': 'INDÚSTRIA',
'prod[0][0][CFOP]': '6102',
'prod[0][0][NCM]': '84384000',
'prod[0][0][UF]': 'SP',
'prod[0][0][aliquotaInterna]': '18',
'prod[0][0][counter]': '1',
'prod[0][0][mva]': '34',
'prod[0][0][tributacaoEstadual]': '7',
'prod[0][0][vICMSST]': '0',
'prod[0][0][vICMS]': '25.74',
'prod[0][0][vIPI]': '0',
'prod[0][0][vProd]': '367.68',
'prod[0][0][xProd]': 'FUSO',
'prod[0][1][CFOP]': '6102',
'prod[0][1][NCM]': '84384000',
'prod[0][1][UF]': 'SP',
'prod[0][1][aliquotaInterna]': '18',
'prod[0][1][counter]': '2',
'prod[0][1][mva]': '23',
'prod[0][1][tributacaoEstadual]': '7',
'prod[0][1][vICMSST]': '0',
'prod[0][1][vICMS]': '15.96',
'prod[0][1][vIPI]': '0',
'prod[0][1][vProd]': '228.07',
'prod[0][1][xProd]': 'PORCA',
'xNome': 'COMERCIAL'}
View
if post:
import re
pattDet = re.compile('^([a-zA-Z_]\w+.)\[([0-9_\-][\w\-]*)\]\[([a-zA-Z_\-][\w\-]*)\]$')
pattProd = re.compile('^([a-zA-Z_]\w+.)\[([0-9_\-][\w\-]*)\]\[([0-9_\-][\w\-]*)\]\[([a-zA-Z_\-][\w\-]*)\]$')
pprint.pprint(post)
det = []
prodtem = []
count = 0
for post_name, value in post.items():
try:
det_count = int(pattDet.match(post_name).group(2))
if pattDet.match(post_name).group(1) == 'det':
det[pattDet.match(post_name).group(3)] = value
except:
pass
try:
if pattProd.match(post_name).group(1) == 'prod':
if count == int(pattProd.match(post_name).group(3)):
prodtem.insert(count, {pattProd.match(post_name).group(4): value})
else:
count += 1
except Exception as e:
print(e)
pass
result.append({
'det': det,
'prod': prodtem
})
много месяцев назад я создал это для django rest framwork, парсер многомерный, исходник находится здесь. Я адаптировал парсер для вас
использовать его
parser = ParserMultiDimensional(data_query) # add your post data
if parser.is_valid():
data = parser.validate_data
# do your things
else:
print(parser.errors)
результат с вашими данными таков
{
"csrfmiddlewaretoken": "AdbaFrsoWeZTnT07m3VjncmYnYHztaQ214qh8AYH2cI40veXfe0dmfSwkI1o2ma1",
"det": [
{
"CNPJ": "8768678678678",
"UF": "SP",
"dhEmi": "2021-07-13T08:26:30-03:00",
"nNF": "8267",
"xNome": "INDÚSTRIA"
}
],
"prod": [
[
{
"CFOP": "6102",
"NCM": "84384000",
"UF": "SP",
"aliquotaInterna": "18",
"counter": "1",
"mva": "34",
"tributacaoEstadual": "7",
"vICMSST": "0",
"vICMS": "25.74",
"vIPI": "0",
"vProd": "367.68",
"xProd": "FUSO"
},
{
"CFOP": "6102",
"NCM": "84384000",
"UF": "SP",
"aliquotaInterna": "18",
"counter": "2",
"mva": "23",
"tributacaoEstadual": "7",
"vICMSST": "0",
"vICMS": "15.96",
"vIPI": "0",
"vProd": "228.07",
"xProd": "PORCA"
}
]
],
"xNome": "COMERCIAL"
}
получайте удовольствие! ;)
Ух, как насчет чего-то более простого вроде этого?:
# unpack body:
body = json.loads(request.body.decode('utf-8'))