1

最近、JSON を使用するプロジェクトに取り組んでいました。Json 文字列を使用して JavaScript を容易にするために、データベースからデータを取得する 2 つの方法がありました。

初め

このように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

2番

このように、データベースからデータを無加工で選択し、フロントエンドで 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

どちらも悪いです。

データの外部形式を提供することは、データベースの責任ではありません。だから最初のものはいいえです。

2 番目の例では、文字列連結を使用して 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 に答える