如何使SQLAlchemy to_json函数不添加列类型输出?

时间:2016-06-29 22:37:44

标签: python json sqlalchemy flask-sqlalchemy

我有一个关联对象,可以访问其to_json函数中的两个字段。一个是字符串,一个是十进制数

这是对象:

class DrinkIngredient(db.Model):
    __tablename__ = 'drink_ingredient'
    drink_id = db.Column(db.Integer, db.ForeignKey("drink.id"), primary_key=True)
    ingredient_id = db.Column(db.Integer, db.ForeignKey("ingredient.id"), primary_key=True)
    units = db.Column(db.Numeric(4, 2)) # Total of 4 digits, 2 after decimal: 00.00

    ingredient = db.relationship("Ingredient")

    def __init__(self, ingredient=None, units=None):
        self.ingredient = ingredient
        self.units = units

    def __repr__(self):
        return '<DrinkIngredient %g units of %r>' % (self.units, self.ingredient)

    def to_json(self):
        json_drinkIngredient = {
            "ingredient": self.ingredient.name,
            "amount": self.units
        }
        return json_drinkIngredient

Ingredient.name是另一个名为Ingredient的表格中的字符串。

当我调用此函数时,我得到这样的输出 {'amount': Decimal('0.20'), 'ingredient': u'grenadine'}

为什么要包含Decimal('...')u'...'以及如何在没有列出类型的情况下正确制作这些json对象。

这也不是一个大问题,但我认为它们的顺序是相反的,因为这是我定义它们的顺序,我不确定它们为什么不在那个命令。

1 个答案:

答案 0 :(得分:0)

使用json模块输出正确的json。

from simplejson import dumps

def to_json(self):
    json_drinkIngredient = dumps({
        "ingredient": self.ingredient.name,
        "amount": self.units
    })
    return json_drinkIngredient

关于你的第二个问题,原因是python词典是无序的。如果维护您声明密钥的顺序非常重要,请使用OrderedDict并将该对象传递给json.dumps

from collections import OrderedDict

d=OrderedDict()
d['ingredient']=self.ingredient.name
d['amount']=self.units