Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django rest框架上JSON数据和Unicode的问题_Json_Python Requests_Django Rest Framework - Fatal编程技术网

django rest框架上JSON数据和Unicode的问题

django rest框架上JSON数据和Unicode的问题,json,python-requests,django-rest-framework,Json,Python Requests,Django Rest Framework,我用djangorestframework=2.3.14制作了一个RESTAPI,客户机使用python requests=2.3.0和nap=1.0.1。客户端向API发送JSON数据,如下所示: response = self.environment_detail_url.patch(data=json.dumps({'egg_list': finder.get_eggs_dict()}), headers={'content-type': 'application/json'}) 在RE

我用djangorestframework=2.3.14制作了一个RESTAPI,客户机使用python requests=2.3.0和nap=1.0.1。客户端向API发送JSON数据,如下所示:

response = self.environment_detail_url.patch(data=json.dumps({'egg_list': finder.get_eggs_dict()}), headers={'content-type': 'application/json'})
在REST API视图中,我使用以下序列化程序:

class EnvironmentSerializer(serializers.ModelSerializer):
    egg_list = serializers.CharField(
        widget=widgets.Textarea,
        write_only=True,
        required=True,
    )

    class Meta:
        model = WebsiteEnvironment
        fields = ('id', 'created', 'modified', 'name', 'url', 'egg_list')
我添加了一个方法validate_egg_list来验证发送的数据以执行一些任务。但当我尝试加载JSON数据时,JSON出现了一个错误,如:

ValueError: Expecting property name: line 1 column 1 (char 1)
实际上,JSON数据如下所示:

{
    u'six': {
        u'url': u'http://pypi.python.org/pypi/six/',
        u'version': u'1.5.2'
    },
    u'pytz': {
        u'url': u'http://pythonhosted.org/pytz',
        u'version': u'2014.4'
    }
}
所有字符串都以unicode符号u作为前缀

我已经在我的API和客户机中搜索了所有地方,以找到哪里做错了什么,但没有找到任何可能导致这种情况的原因

有人有线索吗


谢谢。

那不是JSON。这是一个Python报告。您不能在Python repr上使用JSON解析器,这不是一回事。

查看您在上链接的代码,您在编辑中打印数据的方式是

attrs[source]

鉴于attrs是Django-REST框架提供的一个字典,而source是用来验证egg_-list值的键,我无法理解为什么Django-REST框架会传入解析字典的表示。这看起来至少是一个bug。Django REST框架似乎在对应该验证的数据进行假设,例如,一个简单的数据类型,而不是一个字典。如果它在attrs中的所有值上调用str,那么这就解释了为什么要接收repr。

如果它真的是一个嵌入在由rest框架接收的unicode字符串中的python repr,我不知道它是如何发生的,因为正如您在我的代码示例中看到的,我确实发送了一个JSONI,但不知道您的补丁方法是什么,但那不是JSON。补丁方法来自它只是python请求的一个小包装器,它仍然没有返回JSON。你能发布validate_egg_列表的代码和加载数据的代码吗?是的,您可以在它的存储库中看到它的代码:这也是我的想法,但我不确定它是否真的是一个bug,或者我是否对客户端或api做了一些错误。我将在Django REST框架中解决一个bug问题,以验证这一点。