1

最近我在做一个使用 JSON 的项目,我有两种方法可以从数据库中获取数据,以方便我的 JavaScript 使用 Json 字符串,

第一的

就是在数据库中做处理形成一个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#)

4

3 回答 3

2

更好的方法是通过 SQL Server 获取数据,在 C# 中基于该数据创建一个对象,并为 JSON 使用 JSON 序列化程序。可能是JSON.Net。您可能会遇到使用当前方法维护代码的问题。

于 2012-08-04T13:39:00.887 回答
1

从 SQL 服务器获取“正常”数据,并使用JSON.net等稳定库将其序列化为 json。

于 2012-08-04T13:40:22.487 回答
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);
于 2012-08-04T13:43:20.687 回答