我有一个关联对象,可以访问其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对象。
这也不是一个大问题,但我认为它们的顺序是相反的,因为这是我定义它们的顺序,我不确定它们为什么不在那个命令。
答案 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