浏览代码

新增一个基础类解决int64类型转为Json时的报错问题

liyuyi@c-top.com.cn 4 年之前
父节点
当前提交
e23f61641d
共有 2 个文件被更改,包括 16 次插入1 次删除
  1. 2 1
      ai_strategy_request_func.py
  2. 14 0
      utils/BaseClass.py

+ 2 - 1
ai_strategy_request_func.py

@@ -9,6 +9,7 @@ import requests
 from utils.DataBaseConfig import *
 from utils.UrlConfig import *
 import logging
+from utils.BaseClass import NpEncoder
 
 log_formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s', '%m/%d/%Y %I:%M:%S %p')
 log_handler = ConcurrentTimedRotatingFileHandler("logs/ai_strategy_request.log", when="midnight", backupCount=100)
@@ -55,7 +56,7 @@ def ai_strategy_request_parse(data):
             # 6 发送创建组和创意的请求
             request = requests.post(create_group_and_creative_url,
                                     headers=headers,
-                                    data=json.JSONEncoder().encode(inst.res_data))
+                                    data=json.dumps(inst.res_data, cls=NpEncoder))
             response_data = json.loads(request.text)
 
             # 7 接受的返回信息更新到数据库表

+ 14 - 0
utils/BaseClass.py

@@ -1,4 +1,6 @@
 import tornado.web
+import json
+import numpy as np
 
 
 class BaseHandler(tornado.web.RequestHandler):
@@ -14,3 +16,15 @@ class BaseHandler(tornado.web.RequestHandler):
         # no body
         self.set_status(204)
         self.finish()
+
+
+class NpEncoder(json.JSONEncoder):
+    def default(self, obj):
+        if isinstance(obj, np.integer):
+            return int(obj)
+        elif isinstance(obj, np.floating):
+            return float(obj)
+        elif isinstance(obj, np.ndarray):
+            return obj.tolist()
+        else:
+            return super(NpEncoder, self).default(obj)