django {“detail”:“JSON解析错误-预期值:line 1 column 1(char 0)”}

vyu0f0g1  于 2023-05-08  发布在  Go
关注(0)|答案(6)|浏览(166)

我使用django-restframework,我使用postman POST json数据到我的项目,但我得到了像tittle这样的错误,我已经设置了raw和application/json这里是postman的代码。

POST /account/post/reply/ HTTP/1.1
Host: localhost:8000
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: a0c7bd93-631e-4c7a-8106-87f018eaf7da

{
    "user": "michael",
    "userid": "1",
    "ihelpid": 6,
    "tittle": "6",
    "info": "6",
    "label": "3",
    "tel": "dxy970525",
    "picture1": null,
    "picture2": null
}

我的代码很简单,就像:

from rest_framework.parsers import JSONParser,ParseError

class ReplyViewSet(viewsets.ModelViewSet):
    """
    This viewset automatically provides `list` and `detail` actions.
    """

    pagination_class=PageNumberPagination
    queryset = Forum_reply.objects.all()
    serializer_class = ReplySerializer

    #filter
    filter_backends = (DjangoFilterBackend, )
    filter_fields = ['postID',]
    def create(self, request, *args, **kwargs):
        print(request.data)
        data = JSONParser().parse(request)
        return HttpResponse("ok")

在我使用viewsets之后,这个错误发生了,我已经在shell上打印了它,但是没有问题

vlf7wbxs

vlf7wbxs1#

我实际上也有同样的错误,如果你使用 AJAX ,你需要像下面这样使用JSON.stringify(data):

datato= {
    "id" : 3,
    "title" : "level up",
    "author" : "jason rock"

}

$.ajax({
    method:'POST',
    url:"/home/api",
    data : JSON.stringify(datato),

})

@SeriForte的回答为我指明了正确的方向

axr492tv

axr492tv2#

在我的例子中,我没有在数据中发送正确的JSON。所以请检查一下。

mutmk8jj

mutmk8jj3#

我已经解决了这个问题,我现在可以访问数据了
我改了我以前的代码

print(request.data)
data = JSONParser().parse(request)

这将得到一个错误。如果我的代码如下:

print(request)
data = JSONParser().parse(request)

然后我可以访问字典中的数据。
所以,我不知道为什么,但问题是固定的

soat7uwm

soat7uwm4#

如果使用Javascript获取请求,则必须像这样对JSON Data对象进行字符串化

let data = {
            "key1": 1,
            "key2": "text"
          }
fetch(url, {
            method: 'POST',
            headers: {
              'content-type': 'application/json',
              'X-CSRFToken': csrftoken
            },
            body: JSON.stringify(data) // <-- do not include the Json array directly
          }).then(function (response) {
            // ...
            console.log(response);
            return response.json();
          }).then(function (body) {
            // ...
            console.log(body);
          }).catch(err => {
              console.log(err)
          })
shyt4zoc

shyt4zoc5#

如果你使用的是postman,那么就不可能把注解放在body > raw部分。
像这样x1c 0d1x
所以最好把注解的部分去掉。
高温加热

envsm3lx

envsm3lx6#

您还需要以JSON格式发送数据,例如,如果您的序列化器看起来像这样-
class exampleSerializer(serializers.ModelSerializer): meta:model = example fields =('title ',' content')
所以当你创建一个上面类的新对象时,你需要以下面的格式发送数据-
{“title”:“first”,“content”:“hey”},
这个bug给我解决了!

相关问题