Как преобразовать пост в 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'))
Вернуться на верх