Skip to main content

Load JSON Format Data into SQL Server

Hi All,
Many situation when we are pulling the data from website or calling the data through an API, we end up with JSON data.

If we needed to load JSON Data into Database, we need to break the JSON data into columns. We will see how to break the JSON data using C#.

Consider below JSON Data.
   "requestId":"299f#150942d9c47",
   "result":[ 
      { 
         "id":10357,
         "leadId":3032,
         "activityDate":"2015-06-16T20:20:36Z",
         "activityTypeId":1,
         "primaryAttributeValueId":26,
         "primaryAttributeValue":"eos-celebration",
         "attributes":[ 
            { 
               "name":"Client IP Address",
               "value":"132.197.180.58"
            },
            { 
               "name":"Query Parameters",
               "value":""
            },
            { 
               "name":"Referrer URL",
               "value":""
            },
            { 
               "name":"User Agent",
               "value":Mozilla/5.0 (Windows NT 6.1; WOW64)
            }
         ]
      }
   ]
}

I have split the JSON data into 2 colored section. One is purple where separating the data from JSON is straight forward.

The yellow colored part will be tricky as we have a node/key called “primaryAttributeValue” and primaryAttributeValue is going to be a sub node/tree under it called attributes and attributes has many nodes like "name" and “value”.

Please find the comments below on the code highlighted in red to understand:

C# Code:
String activityResult = pgm.getData(); // Data been called from API
var objActivityResult = JObject.Parse(activityResult); // Parse the data we received to JSON Object

                    if (objActivityResult["result"] != null)
                    {
                        foreach (JObject activityElement in objActivityResult["result"])
                        {
                            activityID = activityElement["id"].ToString();
                            activityLeadID = activityElement["leadId"].ToString();
                            activityDate = activityElement["activityDate"] != null ? activityElement["activityDate"].ToString() : string.Empty;
                            activityPrimaryAttributeValueId = activityElement["primaryAttributeValueId"] != null ? activityElement["primaryAttributeValueId"].ToString() : string.Empty;
                            activityPrimaryattributeValue = activityElement["primaryAttributeValue"] != null ? activityElement["primaryAttributeValue"].ToString() : string.Empty;

                            if (activityElement["attributes"] != null && activityElement["attributes"].Count() != 0)
                            {
                                foreach (JObject activityAttributeData in activityElement["attributes"])
                                {
                                    activityAttributeName = activityAttributeData["name"] != null ? activityAttributeData["name"].ToString() : string.Empty;
                                    activityAttributeValue = activityAttributeData["value"] != null ? activityAttributeData["value"].ToString() : string.Empty;
                                    if (Connection.State == ConnectionState.Closed)
                                        Connection.Open();
                                    string cmdText = @"<<INSERT INTO Tabl>>";
                                    SqlCommand STG_MKT_Activity = new SqlCommand(cmdText, Connection);
                                    STG_MKT_Activity.ExecuteNonQuery();
                                    cntActivity = cntActivity + 1;
                                    Connection.Close();
                                    STG_MKT_Activity.Dispose();
                                }
                            }


Comments

Popular posts from this blog

Zip/Unzip multiple files and also include password for zipped file using SSIS

We have many scenario that we need to Zip many files which we come across and then so some operations like either sending it as a email or just moving zipped file to some other destinations etc. But we were using manual method to zip multiple files. In this post, I tried to create a package which will zip multiple files using SSIS. Here for Zipping files purpose, I'm using 7-ZIP which is free software available in google sites. Download files and install onto your system. First let me show how to Zip on file and later I will show how to zip multiple files using SSIS and 7Zip tool. Compressing Single file. Here I'm trying to Zip one single flat file which is of 40MB size. I kept this file in C:\Documents and Settings\\Desktop\test\source folder. Now to compress this file, I will open my SSIS and I'm dragging and dropping EXECUTE PROCESS TASK from Control Flow. Now right click on Execute Process task and go for edit and select Process option. In process tab,

SSIS: The Value Was Too Large To Fit In The Output Column

I had a SSIS package where I was calling a stored procedure in OLEDB Source and it was returning a “The Value Was Too Large to Fit in the Output Column” error. Well, My Datatype in OLEDB source was matching with my OLEDB Destination table. However, when I googled, we got solutions like to increase the output of OLEDB Source using Advanced Editor option . I was not at all comfortable with their solution as my source, destination and my intermediate transformation all are having same length and data type and I don’t want to change. Then I found that I was missing SET NOCOUNT ON option was missing in Stored Procedure. Once I added it, my data flow task ran successfully. 

How to move multiple files in ssis and also rename simultaneously

There are two ways to achieve this. 1) We can move the flat files and then rename it. 2) While moving files itself, automatic rename should be done. We will do the second type. The criteria is to rename the files while moving from source to destination. So for that, we need FILE SYSTEM TASK to be included. Secondly since we need to move many files, we will use FOR EACH LOOP CONTAINER. To fetch all the files, we can use FOR EACH LOOP task in SSIS. In collection tab, we can select FOREACH FILE enumerator option for fetching files and we can change enumerator configuration Folder option: Points to source where we need to fetch files. Files: will give us idea whether we need to fetch all the files (*.*) or if we give extension like *.txt, it is going to fetch only  .txt files . Once I give Source name in FOR EACH LOOP container, It is going to fetch all the files corresponding to that path. Retrieve file name: This option is used to let the variables mentioned in VARIA