2012-02-05 22 views
0

FLOTチャート用のJSONファイルを作成しようとしていますが、ほぼ成功しています。 (まあ、いくつかの例外を除いて:-)。私は、データがこの形式で吐き出す必要があります。JSONデータを特定の形式で書き込む

{ 
    "label": "ServiceOne", 
    "data": [[164, 35], [200, 35], 204, 35], [192, 84], [140, 54], [300, 66], [155, 110], [108, 101], [200, 94], [223, 99]] 
} 

は代わりに、私はこれを取得:

{ 
    "label:ServiceOne": [ 
    "data:", 
    "[164, 35]" 
    ] 
} 

フォーマットは明らかに間違っている、そしてそれは専用の結果の最初の値を拾っています。

以下は私が作業しているコードです。私は問題がどこにあるか知っています。私はそれを修正するように見えません(私は結果セットをループするいくつかの繰り返しを試しました)。どんな助けでも大歓迎です!!!

using System; 
using System.Configuration; 
using System.Data.SqlClient; 
using System.IO; 
using Newtonsoft.Json; 


namespace ServiceInfo 
{ 

    public static class ServiceFlot 
    { 

     public static string servicename { get; set; } 
     public static string currentcount { get; set; } 
     public static string currentrating { get; set; } 

     public static void Main(string[] args) 
     { 
      try 
      { 

       SqlConnection cn = null; 
       cn = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlConn"].ToString()); 
       cn.Open(); 
       SqlCommand cmd = new SqlCommand((@"SELECT 
         ServiceInfo.subid, 
         ServiceInfo.servicename, 
         ServiceDetails.currentcount, 
         ServiceDetails.currentrating 
         FROM 
          ServiceInfo (NOLOCK) 
         LEFT OUTER JOIN 
          ServiceDetails (NOLOCK) 
         ON 
          ServiceInfo.subid = ServiceDetails.subid 
         WHERE 
         ServiceDetails.lastupdated > DateADD(n, -600, GETDATE())            
         ORDER BY 
         ServiceInfo.servicename"), cn); 

       var myreader = cmd.ExecuteReader(); 

       while (myreader.Read()) 
       { 
        if (myreader["subid"] != null) 
        { 
         servicename = myreader["servicename"].ToString(); 
         currentcount = myreader["currentcount"].ToString(); 
         currentrating = myreader["currentrating"].ToString(); 
         getvars(servicename, currentcount, currentrating); 

         using (FileStream fs = File.Create(@"c:\" + servicename + ".json", 1024)) 
         using (StreamWriter sw = new StreamWriter(fs)) 

         using (JsonWriter jsonWriter = new JsonTextWriter(sw)) 
         { 
          jsonWriter.Formatting = Formatting.Indented; 

          jsonWriter.WriteStartObject(); 
          jsonWriter.WritePropertyName("label:" + servicename); 
          jsonWriter.WriteStartArray(); 

          jsonWriter.WriteValue("data:"); 
          for (int i = 0; i < 1; i++) 
          { 
           jsonWriter.WriteValue(currentcount + ", " + currentrating); 
          } 
          jsonWriter.WriteEnd(); 
          jsonWriter.WriteEndObject(); 
         } 


        } 

       } 

       cn.Close(); 
      } 
      catch (Exception e) 
      { 

       // Print error message 
       Console.WriteLine("Error encountered: " + e.Message); 

       // Exit the application with exit code 1 
       System.Environment.Exit(1); 

      } 
      finally 
      { 

      } 
     } 

    } 

} 
+1

もっと便利なAPIの代わりにJsonWriterを直接使用する特別な理由は何ですか? – millimoose

+0

私はJSONを初めて使いました。使いやすいようです。私が同じ結果を達成できる限り、あなたが良いと思うものは何でもお勧めします。 – mynameisneo

答えて

0

これを試してください。

    using (JsonWriter jsonWriter = new JsonTextWriter(sw)) 
        { 
         jsonWriter.Formatting = Formatting.Indented; 

         jsonWriter.WriteStartObject(); 
         jsonWriter.WritePropertyName("label: \"servicename\""); 

         jsonWriter.WritePropertyName("data:"); 

         jsonWriter.WriteStartArray(); 

         for (int i = 0; i < 1; i++) 
         { 
          jsonWriter.WriteValue(currentcount + ", " + currentrating); 
         } 
         jsonWriter.WriteEnd(); 
         jsonWriter.WriteEndObject(); 
        } 
+0

jsonWriter.WritePropertyがコンパイルされません。許容されるメソッドのように見えません。 – mynameisneo

+0

あなたはそれが存在しないのは間違いありません。私の編集された答えをチェックしてください。 – ShankarSangoli

+0

まだコンパイルされません。連続したWritePropertyNameメソッドを持つことはできません。 forループはまだレコードセット全体を反復しません:-(私のキーボードは髪の毛でいっぱいです。 – mynameisneo

関連する問題