2013-02-21 212 views
3

转储十进制值我一直在使用烧瓶SQLAlchemy的这种模式:烧瓶不宁从烧瓶SQLAlchemy的

class Menu(Document, db.Model): 
    id = db.Column(db.Integer, primary_key=True, autoincrement=True) 
    name = db.Column(db.String(80), unique=True, index=True) 
    price = db.Column(db.Numeric) 

,我可以使用烧瓶不宁该模型创建的API。问题是,当我HTTP GET从API URL:

File "/usr/lib/python2.6/json/encoder.py", line 344, in default 
    raise TypeError(repr(o) + " is not JSON serializable") 
TypeError: Decimal('10000.0000000000') is not JSON serializable 

的问题是显而易见的JSON编码器不能编码被映射到价格十进制值(数字列型)。使用自定义JSON编码器启用Flask-Restless是否有任何解决方法?

回答

3

这里是我做过什么:

import simplejson as json 

def postprocessor(data): 
    json.dumps(data, use_decimal=True) 
    return data 

manager.create_api(Menu, methods=['GET', 'POST', 'PATCH'], allow_patch_many=True, postprocessors={ 
'PATCH_MANY': [postprocessor], 
'GET_MANY': [postprocessor], 
'POST': [postprocessor] 
}) 

这样的想法是使用烧瓶不宁后处理编码与simplejson而不是JSON数据,因为simplejson支持十进制()型通过指定use_decimal =真。

编辑:其实它似乎安装simplejson可能就足够了。您的代码无需更改。

+0

是的,正是我所做的。 – desdulianto 2013-03-11 15:39:46

+1

只需安装simplejson工作!谢谢。 – Hindol 2015-01-03 20:56:47

3

正如mickael的回答所示,安装simpejson就足够了。正确的后处理语法如下:

#first argument must be named as 'result', not 'data' 
def postprocessor(result): 
    json.dumps(result, use_decimal=True) 
    #return data - postprocessors/preprocessors should not return values!