2017-07-06 20 views
0

C#を使用してURLへのAPI呼び出しを行い、JSon応答を返し、jsonファイルをダウンロードします。JSONファイルをMS SQLサーバーにインポート

ウェブアプリケーションで使用するためにjsonデータをデータベースに書きたいと思います。 jsonファイルをsqlにインポートする方法や、C#プログラムからdbに直接書き込む方法があります。次のようにSQLを使用しています2016

私のJSONファイルはなります

{ 

    "Items": [ 
    { 
     "LocalTimestamp": "2017-07-05T18:59:29+02:00", 
     "Id": 653914348, 
     "Description": "Trip Shutdown", 
     "Processed": false, 
     "Position": [ 
      27.90225, 
      -26.07706 
     ] 
    }, 
    { 
     "LocalTimestamp": "2017-07-05T08:41:08+02:00", 
     "Id": 653709051, 
     "Description": "Trip Startup", 
     "Processed": false, 
     "Position": [ 
      27.90229, 
      -26.07753 
     ] 
    }, 
    { 
     "LocalTimestamp": "2017-07-05T07:42:19+02:00", 
     "Id": 653692142, 
     "Description": "Trip Shutdown", 
     "Processed": false, 
     "Position": [ 
      27.90228, 
      -26.07708 
     ] 
    }, 
    { 
     "LocalTimestamp": "2017-07-05T07:21:47+02:00", 
     "Id": 653683088, 
     "Description": "Trip Startup", 
     "Processed": false, 
     "Position": [ 
      27.9222, 
      -26.04318 
     ] 
    }, 
    { 
     "LocalTimestamp": "2017-07-05T07:21:00+02:00", 
     "Id": 653682830, 
     "Description": "Trip Shutdown", 
     "Processed": false, 
     "Position": [ 
      27.92348, 
      -26.04612 
     ] 
    }, 
    { 
     "LocalTimestamp": "2017-07-04T10:15:35+02:00", 
     "Id": 653330923, 
     "Description": "Trip Shutdown", 
     "Processed": false, 
     "Position": [ 
      27.997, 
      -26.05747 
     ] 
    }, 
    { 
     "LocalTimestamp": "2017-07-04T09:41:19+02:00", 
     "Id": 653320268, 
     "Description": "Trip Startup", 
     "Processed": false, 
     "Position": [ 
      28.02899, 
      -26.20546 
     ] 
    }, 
    { 
     "LocalTimestamp": "2017-07-04T09:32:54+02:00", 
     "Id": 653317769, 
     "Description": "Trip Shutdown", 
     "Processed": false, 
     "Position": [ 
      28.0293, 
      -26.20549 
     ] 
    }, 
    { 
     "LocalTimestamp": "2017-07-03T18:40:43+02:00", 
     "Id": 653089737, 
     "Description": "Trip Shutdown", 
     "Processed": false, 
     "Position": [ 
      27.90228, 
      -26.07707 
     ] 
    }, 
    { 
     "LocalTimestamp": "2017-07-03T18:29:01+02:00", 
     "Id": 653086470, 
     "Description": "Trip Startup", 
     "Processed": false, 
     "Position": [ 
      27.94599, 
      -26.07828 
     ] 
    }, 
    { 
     "LocalTimestamp": "2017-07-03T18:26:30+02:00", 
     "Id": 653085810, 
     "Description": "Trip Shutdown", 
     "Processed": false, 
     "Position": [ 
      27.94662, 
      -26.07807 
     ] 
    }, 
    { 
     "LocalTimestamp": "2017-07-03T18:15:50+02:00", 
     "Id": 653082613, 
     "Description": "Trip Startup", 
     "Processed": false, 
     "Position": [ 
      27.98847, 
      -26.05269 
     ] 
    }, 
    { 
     "LocalTimestamp": "2017-07-03T18:13:15+02:00", 
     "Id": 653082018, 
     "Description": "Trip Shutdown", 
     "Processed": false, 
     "Position": [ 
      27.99036, 
      -26.05341 
     ] 
    } 
], 
"HasMoreResults": false 
} 
+1

あなたが受け取ったjson文字列を逆シリアル化し、c#を使用してデータベースに保存することができます。データベースでは、JSON文字列構造に基づいてテーブルを作成する必要があります。 –

+0

典型的なアプローチは、JSONファイルをJSON.NETのオブジェクト表現に分解し、同じ形式を使用するテーブルが追加されたデータベースに出力を送信することです。 – SchmitzIT

+0

[JSONオブジェクトをSQL Serverデータベースに保存する](https://stackoverflow.com/questions/35649357/saving-json-objects-to-sql-server-database) –

答えて

1

[OK]をクリックします。私のコメントで述べたように、オブジェクト/クラスに受け取ったjson文字列を逆シリアル化し、そのクラス/オブジェクトのプロパティをc#でデータベースに保存する必要があります。

データベースでは、 "json文字列構造"または "クラス/オブジェクト"に基づいてテーブルを作成する必要があります。

あなたのJSON文字列によると、クラスはJSON文字列をデシリアライズする

public class Item 
{ 
    public string LocalTimestamp { get; set; } 
    public int Id { get; set; } 
    public string Description { get; set; } 
    public bool Processed { get; set; } 
    public List<double> Position { get; set; } 
} 

public class AllItems 
{ 
    public List<Item> Items { get; set; } 
    public bool HasMoreResults { get; set; } 
} 

を下回るようにする必要があり、以下のコードであり、そのためには、名前空間「 System.Web.Script.Serialization」が必要です。

string jsonstring = @"define your json string here"; 
//Deserialize the json string to the object/class format 
var serializer = new JavaScriptSerializer(); 
AllItems allItemsObj = serializer.Deserialize<AllItems>(jsonstring); 

は、JSON文字列の構造ここで

CREATE TABLE AllItemsTable (
    ItemIdPrimary int NOT NULL IDENTITY(1,1), 
    LocalTimestamp nvarchar(255), 
    Id int, 
    Description nvarchar(255), 
    Processed nvarchar(255), 
    Position1 nvarchar(50), 
    Position2 nvarchar(50) 

    PRIMARY KEY (ItemIdPrimary) 
); 

JSON文字列をデシリアライズし、データベースにデータを を保存するための完全なコードごとにデータベーステーブルを作成します。

はjsonstringについては、私は アプリケーション内で「test1.json」という名前のJSONファイルを追加したと私は そのファイル(「test1.json」からJSONを消費していたJSON file.LateにあなたのJSON文字列をコピー)

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Web.Script.Serialization; 
using System.Data.SqlClient; 
using System.Configuration; 

namespace DeserializeJson2ConsoleApp 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      //Get the Json string 
      string jsonstring = File.ReadAllText(@"D:\My Apps\Console Applications\DeserializeJson2ConsoleApp\DeserializeJson2ConsoleApp\test1.json"); 
      //Deserialize the json string to the object/class format 
      var serializer = new JavaScriptSerializer(); 
      AllItems allItemsObj = serializer.Deserialize<AllItems>(jsonstring); 
      //Save the deserilized object/class to database 
      //Get your connection string defined inside the Web.config(for web application)/App.config(for console/windows/wpf/classlibrary application) file 
      string myConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString; 
      //Create your Sql Connection here 
      using (SqlConnection con = new SqlConnection(myConnectionString)) 
      { 
       //Open the sql connection 
       con.Open(); 
       //Loop each items and save to database 
       foreach (var item in allItemsObj.Items) 
       { 
        //Save/Insert to database 
        if(SaveToDatabase(con, item)) 
        { 
         Console.WriteLine("Success : " + item.Description + " Saved into database"); 
        } 
        else 
        { 
         Console.WriteLine("Error : " + item.Description + " unable to Saved into database"); 
        } 
       } 
      } 
      Console.Read(); 
     } 

     /// <summary> 
     /// Insert to database 
     /// </summary> 
     /// <param name="con"></param> 
     /// <param name="aItemObj"></param> 
     /// <returns></returns> 
     static bool SaveToDatabase(SqlConnection con,Item aItemObj) 
     { 
      try 
      { 
       string insertQuery = @"Insert into AllItemsTable(LocalTimestamp,Id,Description,Processed,Position1,Position2) Values(@LocalTimestamp,@Id,@Description,@Processed,@Position1,@Position2)"; 
       using (SqlCommand cmd = new SqlCommand(insertQuery, con)) 
       { 
        cmd.Parameters.Add(new SqlParameter("@LocalTimestamp",aItemObj.LocalTimestamp)); 
        cmd.Parameters.Add(new SqlParameter("@Id", aItemObj.Id)); 
        cmd.Parameters.Add(new SqlParameter("@Description", aItemObj.Description)); 
        cmd.Parameters.Add(new SqlParameter("@Processed", aItemObj.Processed)); 
        for(int index=0;index<aItemObj.Position.Count;index++) 
        { 
         if(index==0) 
          cmd.Parameters.Add(new SqlParameter("@Position1", aItemObj.Position[index].ToString())); 
         else 
          cmd.Parameters.Add(new SqlParameter("@Position2", aItemObj.Position[index].ToString())); 
        } 
        cmd.ExecuteNonQuery(); 
       } 
       return true; 
      } 
      catch (Exception objEx) 
      { 
       return false; 
      } 
     } 
    } 

    public class Item 
    { 
     public string LocalTimestamp { get; set; } 
     public int Id { get; set; } 
     public string Description { get; set; } 
     public bool Processed { get; set; } 
     public List<double> Position { get; set; } 
    } 

    public class AllItems 
    { 
     public List<Item> Items { get; set; } 
     public bool HasMoreResults { get; set; } 
    } 
} 

そして、ここでデータベースに保存されたデータの後に、コンソールにメッセージです。

enter image description here

そして、ここでデータベースに保存されたデータです。

enter image description here

希望、それはあなたの問題を解決します。何か問題があれば私を元に戻してください。

+0

は魅力的に働いた。チャンダンに感謝 –

関連する問題