首页 > 解决方案 > Django API 抛出异常值:ParserError 类型的对象不是 JSON 可序列化的,没有进入 try 块

问题描述

API 开发新手。任何帮助或文章都会有帮助。我的意见.py

@api_view(["POST"])
def retrieve_base64_as_pdf(request):
    try:
        #base_64_input = request.POST.get('ImageBase64String')
        body_unicode = request.body.decode('utf-8')
        print(len(body_unicode))
        body = json.loads(body_unicode)
        print(len(body))
        base_64_input = body['ImageBase64String']
        doc_ref_id = body['DocRefID']
        #base_64_input = json.loads(request.body["ImageBase64String"])
        pdf = base64.b64decode(base_64_input)
        #build PDF
        with open(os.path.expanduser('life/lpo-test.pdf'), 'wb') as fout:
            fout.write(pdf)
            responses = single_page_extractor(file_names='life/lpo-test.pdf',client_doc_ref_id=doc_ref_id)
            # return Response(responses, safe=False)
            return Response(responses, status=status.HTTP_200_OK)

            # responses = json.responses.replace("\'", '')
            # return Response(responses, status=status.HTTP_200_OK, content_type='json')
    except ValueError as e:
    os.remove('life/lpo-test.pdf')       
    return Response(e, status=status.HTTP_400_BAD_REQUEST)

我的过程,1.消耗base 64运行我的逻辑并输出json。

It works 99% of the time but throws bad request at times. 
1. The json input is the same for all inputs.

错误消息:异常:异常值:ParserError 类型的对象不是 JSON 可序列化的唯一错误:ParserError('错误标记数据。C 错误:第 3 行中应有 1 个字段,看到 12\n')

标签: djangopython-3.x

解决方案


如果来自 django-rest-framework看起来像Response类,它会尝试对你提供的任何输入数据进行 json 化。

在最后一行,您尝试序列化错误对象,这就是您遇到问题的原因:

return Response(e, status=status.HTTP_400_BAD_REQUEST)

尝试将错误包装到strjson-serializable 中:

return Response({'error': str(e)}, status=status.HTTP_400_BAD_REQUEST)

single_page_extractor如果它可以返回错误对象,也可能存在问题。


推荐阅读