gpt4 book ai didi

python - django 休息框架 : is not JSON serializable
转载 作者:行者123 更新时间:2023-11-28 21:06:22 24 4
gpt4 key购买 nike

我已经安装了“us”模块(https://pypi.python.org/pypi/us)来获取美国各州。它打印状态列表。我想以下列格式在 API 中显示它。

{
"states": [
{
"state_code":"CA",
"state_name":"California"
},
{
"state_code":"AL",
"state_name":"Alabama"
}
]
}

现在显示以下错误。

TypeError at /api/v1/us/states
<State:Alabama> is not JSON serializable

View .py

@api_view(['GET'])
def get_all_states(request):
states = us.states.STATES
print (states)
return Response({'states':states})

当我打印状态时,它具有以下格式。

[<State:Alabama>, <State:Alaska>, <State:Arizona>, <State:Arkansas>, <State:California>, <State:Colorado>, <State:Connecticut>, <State:Delaware>  <State:West Virginia>, <State:Wisconsin>, <State:Wyoming>]

网址.py

urlpatterns = [
url(r'^us/states', get_all_states),
]

我没有为此使用任何序列化程序。有没有办法遍历状态并获取格式化的状态数据?

最佳答案

当您在 Response 中返回一个 dict 时,django 会考虑并将其作为 application/json 内容类型的响应返回。它使用 json 库来序列化它。 dict 是可序列化的,但 State 对象不是。你需要自己给它充气。像这样。

@api_view(['GET'])
def get_all_states(request):
states = [{'state_code': x.abbr, 'state_name': x.name} for x in us.states.STATES]
print (states)
return Response({'states': states})

由于您只需要某种静态数据,因此缓存它始终是个好主意。或者将它膨胀一次,这样它就不会在每次请求时重复。

US_STATES = [{'state_code': x.abbr, 'state_name': x.name} for x in us.states.STATES]

@api_view(['GET'])
def get_all_states(request):
return Response({'states': US_STATES})

快乐编码。

关于python - django 休息框架 : <object> is not JSON serializable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42929933/

24 4 0