django rest 框架:<object> 不是 JSON 可序列化
django rest framework: <object> is not JSON serializable
我已经安装了 '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
views.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>]
urls.py
urlpatterns = [
url(r'^us/states', get_all_states),
]
我没有为此使用任何序列化程序。有没有办法遍历状态并获取格式化的状态数据?
当您在响应中 return 一个 dict
时,django 将其视为 return 并将其作为 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})
编码愉快。
我已经安装了 '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
views.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>]
urls.py
urlpatterns = [
url(r'^us/states', get_all_states),
]
我没有为此使用任何序列化程序。有没有办法遍历状态并获取格式化的状态数据?
当您在响应中 return 一个 dict
时,django 将其视为 return 并将其作为 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})
编码愉快。