2017-06-16 5 views
1

両方のコンピュータは、同じブラウザバージョン(chrome 58.0.3029.110(64ビット))でFlaskバージョン0.12.2を実行しています。オブジェクトを含むリストを返すコンピュータは、ubuntu 14.04です。タプルを含むリストは、osx 10.11.6を実行しています。 フラスコJsonifyは、あるコンピュータ上のオブジェクトのリストと他のコンピュータ上のタプルを含むリストを返す

これは、シリアル化jsonify関数に渡されるデータの一例であるデータ [( 'CODE1'、[ 'website1.com'])、( 'CODE2'、[ 'website2.com'])]

osxマシンのブラウザコンソールの出力は、[["Code1"、["website1.com"]]、["Code2"、["website2.com"]]]

[ : "code1"、場所:["website1.com"]}、{"code": "Code2"、場所:["website2.com"]}]

EDIT: したがって、再現する手順は次のとおりです。続く。テーブルテストテーブルを使用してtest_dbを作成します。

createdb test_db 

psql 

=# create table testtable (code1 text, code2 text); 

必要な2つのファイル

は、名前のモデルファイルですtest_model.py

from test_file import db 

class myModel(db.Model): 
    __tablename__ = 'testtable' 

    code1 = db.Column(db.Text, primary_key=True) 
    code2 = db.Column(db.Text) 
    def __init__(self, co1, co2): 
     self.code1 = co1 
     self.code2 = co2 

とtest_file.py

from flask import jsonify, Flask 
from flask_sqlalchemy import SQLAlchemy 

app = Flask(__name__) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgres://localhost:5432/test_db' 
db = SQLAlchemy(app) 

import test_model 

@app.route("/") 
def b(): 
    a = [('Code1', ['website1.com']), ('Code2', ['website2.com'])] 
    myModel = test_model.myModel("website1.com", "website2.com") 
    myModel = test_model.myModel("website3.com", "website4.com") 
    db.session.add(myModel) 
    db.session.commit() 
    query = test_model.myModel.query.with_entities(test_model.myModel.code1).all() 
    print("my model", query, type(query)) 
    foo = jsonify(query) 
    print(foo) 
    return foo 


#runs servlet, debug=true if you want to test running code 
if __name__ == "__main__": 
    app.run(host="0.0.0.0", debug=True) 

必要ピップライブラリですpsycopg2、フラスコ、フラスコ、SQLAlchemyの

simplejsonを使わずにpython test_file.pyを実行しているときにブラウザをlocalhost:5000 ouにインストールした場合tputs

[ 
    [ 
    "website3.com" 
    ], 
    [ 
    "website3.com" 
    ], 
    [ 
    "website3.com" 
    ], 
    [ 
    "website3.com" 
    ], 
    [ 
    "website3.com" 
    ], 
    [ 
    "website3.com" 
    ] 
] 

のsimplejsonを実行している、それはそれは多分のsimplejsonとフラスコSQLAlchemyの間の相互作用についての何かであるすべてに
[ 
    { 
    "code1": "website3.com" 
    }, 
    { 
    "code1": "website3.com" 
    }, 
    { 
    "code1": "website3.com" 
    }, 
    { 
    "code1": "website3.com" 
    }, 
    { 
    "code1": "website3.com" 
    }, 
    { 
    "code1": "website3.com" 
    }, 
    { 
    "code1": "website3.com" 
    } 
] 

すべて

を出力インストールされていますか?フラスコを使用してその両端に起こったばかりです

+0

入力データが同じ場合は不可能です。 [編集]に[mcve]を含めるようにしてください。あなたは両方のマシンでそれを新鮮に展開しようとしましたか? – davidism

+0

現在、このような例として取り組んでおり、両方のマシンに新しくデプロイされています。より大きなプロジェクトなので、同じ問題を再現するのに少し時間がかかるかもしれませんが、私はそれに取り組んでいます。 – Bard117

+0

まだ[mcve]を投稿してください。あなたが言うことが実際に真実であるならば、それは私たちが修正する必要があるFlaskの巨大なバグです。しかし、私はシンプル・ジーソンが実際には何か違うものを戻していることに幾分疑念を抱いています。 – davidism

答えて

1

ubuntuを実行しているマシンにsimplejson pythonパッケージがインストールされていました。それはPythonのjsonライブラリをオーバーライドして、jsonifyを呼び出すときに期待通りに配列の配列の代わりにオブジェクトの配列を返すようにします。

関連する問題