2012-02-05 2 views
0

Я пытаюсь написать файлы JSON для составления карт FLOT, и я почти успешно! (ну, за некоторыми исключениями :-). Мне нужны данные, чтобы выплюнуть в этом формате:Запись данных 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

Любая конкретная причина, по которой вы используете JsonWriter напрямую, вместо более удобного API? – 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

Смежные вопросы