2012-08-04 47 views
1

最近我工作中使用JSON的一個項目,我有兩種方法來從數據庫中獲得數據,方便我用JSON字符串的JavaScript,SQL VS前端處理

首先

是做處理數據庫,形成一個JSON字符串,這樣

select 
     ID, 
    '{ "Comments": ['+ 
    Substring(
     (SELECT 
      ',{ '+ 
      '"Comment" : "' + REPLACE(Comments,'"','\"') + '",'+ 
      '"Name" : "' + REPLACE(Name,'"','\"') + 
     '}' 
    FROM JsonTbl 
    where JsonTbl.ID = tbl.ID 
    for xml path('') 
    ),2,250000) 
     +'] }' as JsonData 
from tbl 

是不經任何處理,選擇從數據庫中的數據,並做創造前端的JSON字符串,這樣

DataTable data = GetDataFromDatabase(); 
StringBuilder sb = new StringBuilder(); 
sb.Append("{ \"Comments\": ["); 
for (int i = 0; i < data.Rows.Count; i++) 
{ 
    sb.Append("{"); 
    sb.Append("\"Comment\" : \"" + data.Rows[i]["Comment"].ToString().Replace('"', '\"') + "\","); 
    sb.Append("\"Name\" : \"" + data.Rows[i]["Comment"].ToString().Replace('"', '\"') + "\""); 
    sb.Append("},"); 
} 
sb.Remove(sb.Length - 1, 1); 

我想知道哪一個會從更好的性能以及觀點維修點處理。

注:請考慮,我已經修剪的代碼張貼在這裏的原代碼比這大得多,我使用MSSQL 2008和.Net(C#)

回答

2

更好的方法是讓你的數據通過SQL Server,基於C#中的數據創建一個對象,併爲JSON使用JSON序列化器。可能是JSON.Net。您可能會面臨使用當前方法維護代碼的問題。

+1

+1:這種方法保持層中的應用*分離(不做在數據層格式,如果你能避免它)*,並建議管理,格式化的明確和維護的方式。簡而言之,它是選項2,整潔。 – MatBailie 2012-08-04 13:41:12

1

獲得「正常」的數據從您的SQL服務器,並且使用了穩定的圖書館像JSON.net將其序列化到JSON。

1

兩者都不好。

這不是數據庫的責任,給你數據的外部格式。所以第一個是沒有。

在第二個你使用字符串連接來建立你的JSON。這很脆弱。

一個好方法是將數據加載到對象,然後使用JSON庫它們序列化到JSON。

DataTable dtable = GetDataFromDatabase(); 
var data = from row in dtable 
      select new { Comment = row["Comment"], 
         Name = row["Name"] }; 

JavaScriptSerializer serializer = new JavaScriptSerializer(); 
String json = serializer.Serialize(data); 
+0

如何序列化一個DataTable,它給出了循環引用的錯誤。 – yogi 2012-08-04 13:46:25

+0

您可以使用LINQ進行投影(請參閱我編輯的答案)。 – Alex 2012-08-04 13:57:48