将请求主体转换为json Django Python

au9on6nz  于 2023-01-31  发布在  Go
关注(0)|答案(3)|浏览(115)

下面是python Django中的一个视图及其输出
代码

@csrf_exempt
def stk_push_callback(request):

    data = request.body
    print(data)

    got_data = json.loads(data.decode("utf-8"))

    result_code = got_data['Body']['stkCallback']['ResultCode']
    result_desc = got_data['Body']['stkCallback']['ResultDesc']

    print(' ')
    print('ResultCode: ', result_code)
    print(result_desc)
    print(' ')

    room = room_val()
    check_in = in_val()
    check_out = out_val()
    user = user_val()

    if result_code == 0:
        booking = book_room(user, room, check_in, check_out)
        print (booking)
    
        return render(request, 'booking/paymentcomplete.html')

    else:
        return render(request, 'booking/paymenterror.html')

输出print(data)

b'{"Body":{"stkCallback":{"MerchantRequestID":"9088-17223944-1","CheckoutRequestID":"ws_CO_310520212138262746","ResultCode":1032,"ResultDesc":"Request cancelled by user"}}}'

如何将输出转换为json,以及如何访问"ResultCode":1032值以进行进一步处理?

esbemjvw

esbemjvw1#

我是电话部的,很难再解释了。

import json
data = request.body
data_dict = json.loads(data.decode("utf-8")) 
print(data_dict['Body']['stkCallback']['ResultCode'])

有关详细信息,请查看How to convert bytes type to dictionary?答案。

7hiiyaii

7hiiyaii2#

使用json()方法。

data = request.json()
bq3bfh9z

bq3bfh9z3#

实际上,你离解决问题不远了。
request.post通过html表单处理post数据。
request.body以字节串的形式提供了原始的HTTP请求主体,您可以使用json.loads()将其转换为字典。
我用的是got_data = json.loads(data),效果和预期的一样。
data被转换成Python字典,所以你可以在它上面做与字典相关的操作,
result_code = got_data['Body']['stkCallback']['ResultCode']
More detailed blog post here.

相关问题