django rest框架上JSON数据和Unicode的问题
我用djangorestframework=2.3.14制作了一个RESTAPI,客户机使用python requests=2.3.0和nap=1.0.1。客户端向API发送JSON数据,如下所示: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
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问题,以验证这一点。