Object of type 'Decimal' is not JSON serializable


Error

  • は、以下に示すように、mysql dbと併せてフラスコで値を取得し、jsonフォーマットに変換中にエラーが発生しました.
    def empall(self): 
            all = []
            try:
                conn = getConnection()
                cursor = conn.cursor()
                try:
                    cursor.execute("select * from emp01")
                    rows = cursor.fetchall()
    
                    objects_list = []
                    for row in rows:
                        d = collections.OrderedDict()
                        d['empno'] = row[0]
                        d['ename'] = row[1]
                        d['sal'] = row[2]
                        objects_list.append(d)
                    all = json.dumps(objects_list)
                except Exception as e:
                    print(e)
            except Exception as e:
                print(e)
            finally:
                cursor.close()
                conn.close()
            return all
  • Error
    Object of type 'Decimal' is not JSON serializable
  • エラー解決

  • oracledbは少数をjsonフォーマットにうまく変換できるがmysqlはうまく変換できないようだ.
  • 小数点以下のrow[2]部分をint(row[2])またはfloat(row[2])に変換して解決します.