2015-04-25 132 views
6

當我進行Sequelize查詢時,它返回給我一個對象(或數組),我猜測它是一個Sequelize模型(或模型數組(集合類型??)),但是它沒有記錄在任何地方,所以我只是猜測。我總是喜歡結果是JSON。有什麼我可以通過查詢強制這個?如果可能的話,我寧願不手按摩每一個結果,我回到JSON。如何在Sequelize中以JSON形式返回數據

The documentation顯示這個返回的字符串:

console.log(JSON.stringify(users)) 

所以有一些內置的序列化。現在,我這樣做,使用無證toJSON()方法:

query().then(function(result) { 
    if(result.length) { 
     return result.toJSON(); 
    } else { 
     return result.map(function(item) { 
      return item.toJSON(); 
     }); 
    } 
}); 

這是麻煩的。

回答

2

如果你正在做一個查詢,其中有多個結果,你應該期望返回一個數組。您應該發現結果數組中的每個元素都是JSON對象。

您應該能夠訪問這樣一個給定的領域:result[0].myfieldname

+0

這是否意味着不可能強制Sequelize始終以JSON形式返回結果? –

+1

這意味着它們應該已經在JSON中。嘗試使用JSON.stringify()來查看裏面的內容。你的代碼應該是這樣的: 'query()。then(function(result){ console.log(JSON.stringify(result)) });'' – Lucas

7

您可以使用raw: true在查詢然而,這並不總是表現爲你所期望的,尤其是與關聯。

query({ 
    // ... 
    raw: true 
}).then(function(result) { 
    // Result is JSON! 
}); 

然而,在你使用的關聯,你可能會得到這樣的情況:

{ 
    foo: true, 
    "associated.bar": true 
} 

而不是你所期望的:

{ 
    foo: true, 
    associated: { 
     bar: true 
    } 
} 
6

當您檢索模型從數據庫中,您可以在結果上調用.get({ plain: true}),它將爲您處理轉換。您可以將函數調用的值分配給一個變量。例如

..).then(function(user){ var _user = user.get({ plain: true}); console.log(_user); //Should be valid json object });

希望這有助於。