json.loads尝试将JSON数组转换为Python lis时抛出错误

2024-03-29 15:29:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是Django Rest framework2.4,在序列化程序中,我有这段代码

def validate_fields(self, attrs, source):                                                                                               
    print(attrs)                                                                                                                        
    fields = json.loads(attrs[source]) 

我一直在听到这样的错误:没有JSON对象可以被解码。^{cd1>}被调用,但获取^{{cd2>}作为字符串,而不是Python字符串列表。

我现在正在得到

^{pr2}$

当我想收到这个的时候,我就是这么发的

^{pr3}$

enter image description here


Tags: django字符串代码self程序restjsonsource
1条回答
网友
1楼 · 发布于 2024-03-29 15:29:58

Django-REST框架为您处理JSON解码。在

您的attrs的输出是有意义的:它是一个Python字典,包含一个带有字符串值的Python列表。不需要进一步解码,因为Django REST框架在接收请求时已经为您完成了这项工作。在

现在可以使用attrs[source]的值了,它的格式是您期望的。您可能希望得到一个整数列表(不是字符串化的整数),在这种情况下,您可以对该列表进行后期处理并使用int对其进行映射。如果不是,则attrs的输出将如下所示:

{"fields": '["1", "2", "3"]'}

注意新的引号。这意味着Django-REST框架无法读入JSON数据,因此它将其作为字符串提供给您。这也可能意味着它不知道把它作为一个列表来阅读,在这种情况下,继续阅读以找到第二个可能的解决方案。在


还要确保序列化程序上的fields字段被设置为many=True或被包装为in a ^{}。在

^{pr2}$

这就可以解释为什么Python列表被强制为一个字符串,这也解释了为什么不能解析它,因为Python列表与JSON列表并不完全匹配。在

相关问题 更多 >