NumPy array is not JSON serializable
2684 ワード
バックエンドアルゴリズムで処理した画像をdjangoでフロントエンドインタフェースに表示する過程で、バックエンドからフロントエンドへの伝送インタフェースは以下の通りである.
#インタフェース関数def post(request):if request.method='POST':#フォームをコミットするとdic={}#data={'name':“サーバが正常に動作します!”}クライアントのデータを返すif requestを参照するか否かを判断する.POST:#print(request.POST)#クライアントからのリクエスト内容を表示image_path = request.POST.get('a', 0) #b = request.POST.get('b',0)#パラメータにa if image_が含まれているか否かを判断path : #res = add_args(a, b) image,result=main(image_path=image_path) if isinstance(image, np.ndarray): image=image.tolist() dic['result'] = image dic = json.dumps(dic) #,cls=NumpyEncoder) return HttpResponse(dic) #,JsonResponse(data)else:return HttpResponse('入力エラー!')else:return HttpResponse('入力が空')else:return HttpResponse('赤外線画像パスに入力してください!')
上の赤い部分のコードが間違っています:NumPy array is not JSON serializable
解決策、参考:https://stackoverflow.com/questions/26646362/numpy-array-is-not-json-serializable
上記の部分のコードに基づいて、元のコードを修正します.
#インタフェース関数def post(request):if request.method='POST':#フォームをコミットするとdic={}#data={'name':“サーバが正常に動作します!”}クライアントのデータを返すif requestを参照するか否かを判断する.POST:#print(request.POST)#クライアントからのリクエスト内容を表示image_path = request.POST.get('a', 0) #b = request.POST.get('b',0)#パラメータにa if image_が含まれているか否かを判断path : #res = add_args(a, b) image,result=main(image_path=image_path) if isinstance(image, np.ndarray): image=image.tolist() dic['result'] = image dic = json.dumps(dic,cls=NumpyEncoder)#修正された部分!return HttpResponse(dic)#,JsonResponse(data)else:return HttpResponse('入力エラー!')else:return HttpResponse('入力が空')else:return HttpResponse('赤外線画像パスを入力してください!')
#インタフェース関数def post(request):if request.method='POST':#フォームをコミットするとdic={}#data={'name':“サーバが正常に動作します!”}クライアントのデータを返すif requestを参照するか否かを判断する.POST:#print(request.POST)#クライアントからのリクエスト内容を表示image_path = request.POST.get('a', 0) #b = request.POST.get('b',0)#パラメータにa if image_が含まれているか否かを判断path : #res = add_args(a, b) image,result=main(image_path=image_path) if isinstance(image, np.ndarray): image=image.tolist() dic['result'] = image dic = json.dumps(dic) #,cls=NumpyEncoder) return HttpResponse(dic) #,JsonResponse(data)else:return HttpResponse('入力エラー!')else:return HttpResponse('入力が空')else:return HttpResponse('赤外線画像パスに入力してください!')
上の赤い部分のコードが間違っています:NumPy array is not JSON serializable
解決策、参考:https://stackoverflow.com/questions/26646362/numpy-array-is-not-json-serializable
import json
import numpy as np
class NumpyEncoder(json.JSONEncoder):
""" Special json encoder for numpy types """
def default(self, obj):
if isinstance(obj, (np.int_, np.intc, np.intp, np.int8,
np.int16, np.int32, np.int64, np.uint8,
np.uint16, np.uint32, np.uint64)):
return int(obj)
elif isinstance(obj, (np.float_, np.float16, np.float32,
np.float64)):
return float(obj)
elif isinstance(obj,(np.ndarray,)): #### This is the fix
return obj.tolist()
return json.JSONEncoder.default(self, obj)
dumped = json.dumps(data, cls=NumpyEncoder)
with open(path, 'w') as f:
json.dump(dumped, f)
上記の部分のコードに基づいて、元のコードを修正します.
#インタフェース関数def post(request):if request.method='POST':#フォームをコミットするとdic={}#data={'name':“サーバが正常に動作します!”}クライアントのデータを返すif requestを参照するか否かを判断する.POST:#print(request.POST)#クライアントからのリクエスト内容を表示image_path = request.POST.get('a', 0) #b = request.POST.get('b',0)#パラメータにa if image_が含まれているか否かを判断path : #res = add_args(a, b) image,result=main(image_path=image_path) if isinstance(image, np.ndarray): image=image.tolist() dic['result'] = image dic = json.dumps(dic,cls=NumpyEncoder)#修正された部分!return HttpResponse(dic)#,JsonResponse(data)else:return HttpResponse('入力エラー!')else:return HttpResponse('入力が空')else:return HttpResponse('赤外線画像パスを入力してください!')