6

基本的に、SQLクエリの結果をjsonエンコードしたいだけです。

x = db.session.query(User).filter_by(username = request.form['username'], password = request.form['password']).first()
  print vars(x)
return jsonify(x)

raise TypeError(repr(o) + " is not JSON serializable")

TypeError: < User WashingtonGeorge> is not JSON serializable

print vars(x) の結果は次のとおりです。

{'_updated': None, 'username': u'WashingtonGeorge', 'password': u'Washington', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x7fd12a50c8d0>, 'firstname': u'George', 'lastname': u'Washington', '_created': None, 'fullname': u'George Washington', '_id': 1, 'email': u'WashingtonGeorge@yahoo.com'}
4

3 に答える 3

5

マシャロが使えます。これが例です。a を定義してファイルのserializer.py横に置き、次のようにします。main.py

serializer.py

from marshmallow import Serializer

###### USER SERIALIZER #####
class UserSerializer(Serializer):
    class Meta:
        # Fields to expose
        fields = ('username')
        # you can add any other member of class user in fields

#Return the user data in json format
def get_user_serialized(user):
    return UserSerializer(user).data

あなたのmain.py

from .serializers import get_user_serialized
...
...
...

x = db.session.query(User).filter_by(username = request.form['username'], password = request.form['password']).first()

serialized = [get_user_serialized(item) for item in x]
res = jsonify(res=serialized)
return res
于 2014-11-02T22:05:43.673 に答える
0

あなたの変数'_updated'&はDateTime 型であると仮定します。Datetime は jsonify でシリアル化できません。datetime 変数を str に変換するだけです。つまり、 str(some_date_in_datetimeformat) が機能する可能性があります。 また、sqlalchemy.orm.state.InstanceState 型はシリアライズ可能である必要があります。'_created'class User
'_sa_instance_state'

アップデート:

jsonify はオブジェクトをシリアライズできません。最善の解決策は、クラス内で関数 serialize() を定義し、それを使用してデータをシリアライズ可能にすることです。だからあなたのクラスは、

class User(object):
    def serialize():
        return {
            '_id': 1,
            'username': u'WashingtonGeorge'
            'fullname': u'George Washington'
            # other fields that you need in the json 
        }

次に、データをjson化する場所で、呼び出すだけです。

jsonify(x.serialize())
于 2014-05-12T15:17:46.703 に答える