{"id":1636,"date":"2017-08-03T02:55:02","date_gmt":"2017-08-03T02:55:02","guid":{"rendered":"http:\/\/zappysys.com\/blog\/?p=1636"},"modified":"2024-09-23T08:03:33","modified_gmt":"2024-09-23T08:03:33","slug":"parse-multi-dimensional-json-array-ssis","status":"publish","type":"post","link":"https:\/\/zappysys.com\/blog\/parse-multi-dimensional-json-array-ssis\/","title":{"rendered":"Parse JSON array in SSIS or ODBC Drivers"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p>In our <a href=\"\/\/zappysys.com\/blog\/extract-read-multiple-arrays-from-json-data-file-rest-api-response\/\" target=\"_blank\" rel=\"noopener\">previous post<\/a> we saw how to <strong>parse JSON arrays<\/strong>. Now let&#8217;s look at more advanced techniques to parse multi-dimensional JSON array in SSIS ( \u00a0e.g. 2D &#8211; JSON array inside array). We will use <a href=\"\/\/zappysys.com\/products\/ssis-powerpack\/ssis-json-file-source\/\" target=\"_blank\" rel=\"noopener\">SSIS JSON Source<\/a> to parse complex nested JSON in few clicks. Tips and Tricks mentioned in this article also apply to <a href=\"https:\/\/zappysys.com\/products\/odbc-powerpack\/\" target=\"_blank\" rel=\"noopener\">ODBC PowerPack API Drivers<\/a>.<\/p>\n<p>2D arrays are used to stuff more data in most compact way. Since you don&#8217;t have to repeat column names you save great amount of space. 2D array JSON format is close to CSV format in data size but it gives advantage and structure of JSON without adding extra fat.<\/p>\n<h2>Parsing JSON Arrays &#8211; Simple hierarchy<\/h2>\n<p>If you have simple JSON \/ XML Structure then you can use <strong>Select Filter option<\/strong> to parse array and flatten the hierarchy. You can select top level array or nested array to de-normalize the structure.<\/p>\n<p>For example you can select $.orders[*] to extract all order records or use $.orders[*].items[*] to get each order items for all orders. There is also possibility to use light weight expression (like WHERE clause). Check this article <a href=\"https:\/\/zappysys.com\/blog\/jsonpath-examples-expression-cheetsheet\/\" target=\"_blank\" rel=\"noopener\">how to use JSONPath<\/a>\u00a0but it has its own limitation,<\/p>\n<div id=\"attachment_1573\" style=\"width: 685px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/07\/ssis-get-data-google-bigquery-select-json-filter.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1573\" class=\"size-full wp-image-1573\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/07\/ssis-get-data-google-bigquery-select-json-filter.png\" alt=\"Select Filter\" width=\"675\" height=\"363\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/07\/ssis-get-data-google-bigquery-select-json-filter.png 675w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/07\/ssis-get-data-google-bigquery-select-json-filter-300x161.png 300w\" sizes=\"(max-width: 675px) 100vw, 675px\" \/><\/a><p id=\"caption-attachment-1573\" class=\"wp-caption-text\">Select Filter<\/p><\/div>\n<p>&nbsp;<\/p>\n<h2>Parsing Multi-Dimensional JSON Arrays<\/h2>\n<p>Now lets look at how to parse various multi-dimensional JSON array patterns in SSIS using <a href=\"\/\/zappysys.com\/products\/ssis-powerpack\/ssis-json-file-source\/\" target=\"_blank\" rel=\"noopener\">SSIS JSON Source\u00a0<\/a>\u00a0or ODBC API drivers like JSON Driver<\/p>\n<ol>\n<li>2D Value Array with schema information (column names in a separate array) &#8211; <strong>Pattern 1<\/strong><\/li>\n<li>2D Value Array without schema information &#8211; <strong>Pattern 2<\/strong><\/li>\n<li>Parse JSON Array using Complex Transformation &#8211; <strong>Pattern 3<\/strong><\/li>\n<li>Key\/Value Transformation &#8211; <strong>Pattern 4<\/strong><\/li>\n<li>Multiple columns using JSONPath Expression (Google Geocoding API Usecase) &#8211; <strong>Pattern 5<\/strong><\/li>\n<li>Columnless Array &#8211; <strong>Pattern 6<\/strong><\/li>\n<\/ol>\n<h3>Pattern 1 &#8211; JSON Array using Simple Transformation (Column names found in JSON)<\/h3>\n<p>This is the most common pattern of multi-dimensional JSON array where column names are stored in a separate array and values are stored in another 2D array<\/p>\n<pre class=\"lang:js decode:true\">{\r\n  \"columns\" : [\"Id\", \"FirstName\", \"IsActive\"],\r\n  \"rows\" : [ [1,\"bob\",true], [2,\"sam\",false], [3,\"joe\",true] ]\r\n}<\/pre>\n<p><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-1-select-filter.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1641\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-1-select-filter.png\" alt=\"\" width=\"840\" height=\"578\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-1-select-filter.png 840w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-1-select-filter-300x206.png 300w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-1-select-filter-768x528.png 768w\" sizes=\"(max-width: 840px) 100vw, 840px\" \/><\/a><\/p>\n<p><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-1-select-2d-transformation.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1640\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-1-select-2d-transformation.png\" alt=\"\" width=\"687\" height=\"165\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-1-select-2d-transformation.png 687w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-1-select-2d-transformation-300x72.png 300w\" sizes=\"(max-width: 687px) 100vw, 687px\" \/><\/a><\/p>\n<p><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-1-preview.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1639\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-1-preview.png\" alt=\"\" width=\"672\" height=\"569\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-1-preview.png 672w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-1-preview-300x254.png 300w\" sizes=\"(max-width: 672px) 100vw, 672px\" \/><\/a><\/p>\n<h3>Pattern 2 &#8211; JSON Array using Simple Transformation\u00a0(Column names not found in JSON)<\/h3>\n<p>This is another common pattern of multi-dimensional JSON array where there are no column names. Values are stored in 2D array. <a href=\"\/\/zappysys.com\/blog\/get-data-google-spreadsheet-using-ssis\/\" target=\"_blank\" rel=\"noopener\">Google SpreadSheet API<\/a> uses this approach. In this pattern you don&#8217;t have column names specified so we have to enter manually (This like a CSV file without column names header). On the 2D array Tab check &#8220;Specify columns list manually&#8221; option. Then enter column names separated by comma. Enter same number of columns in same order as value array.<\/p>\n<pre class=\"lang:default decode:true\">{\r\n  \"rows\" : [ [1,\"bob\",true], [2,\"sam\",false], [3,\"joe\",true] ]\r\n}<\/pre>\n<p><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-2-select-filter.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1647\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-2-select-filter.png\" alt=\"\" width=\"840\" height=\"543\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-2-select-filter.png 840w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-2-select-filter-300x194.png 300w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-2-select-filter-768x496.png 768w\" sizes=\"(max-width: 840px) 100vw, 840px\" \/><\/a><\/p>\n<p><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-2-select-2d-transformation.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1646\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-2-select-2d-transformation.png\" alt=\"\" width=\"687\" height=\"166\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-2-select-2d-transformation.png 687w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-2-select-2d-transformation-300x72.png 300w\" sizes=\"(max-width: 687px) 100vw, 687px\" \/><\/a><\/p>\n<p><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-2-preview.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1645\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-2-preview.png\" alt=\"\" width=\"672\" height=\"543\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-2-preview.png 672w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-2-preview-300x242.png 300w\" sizes=\"(max-width: 672px) 100vw, 672px\" \/><\/a><\/p>\n<h3>Pattern 3 &#8211; JSON Array using Complex Transformation<\/h3>\n<p>Below is more complex version where column names are found in array of column schema documents. Values are also stored in 2D array with complex structure. <a href=\"\/\/zappysys.com\/blog\/get-data-google-bigquery-using-ssis\/\" target=\"_blank\" rel=\"noopener\">Google BigQuery<\/a> uses similar complex structure<\/p>\n<pre class=\"lang:default decode:true\">{\r\n  \"schema\" : { \r\n    \"columns\" : [\r\n      {\"Name\":\"Id\", \"Type\":\"int\"}, \r\n      {\"Name\":\"FirstName\", \"Type\":\"string\"}, \r\n      {\"Name\":\"IsActive\", \"Type\":\"bool\"}\r\n    ]\r\n  },\r\n  \"rows\" : [ \r\n    { \"rowid\":1 , \"values\" : [1,\"bob\",true] }, \r\n    { \"rowid\":2 , \"values\" : [2,\"sam\",false] },\r\n    { \"rowid\":3 , \"values\" : [3,\"joe\",true] }\r\n  ]\r\n}<\/pre>\n<p><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-1-select-filter.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1641\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-1-select-filter.png\" alt=\"\" width=\"840\" height=\"578\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-1-select-filter.png 840w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-1-select-filter-300x206.png 300w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-1-select-filter-768x528.png 768w\" sizes=\"(max-width: 840px) 100vw, 840px\" \/><\/a><\/p>\n<p><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-3-select-2d-transformation.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1643\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-3-select-2d-transformation.png\" alt=\"\" width=\"689\" height=\"272\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-3-select-2d-transformation.png 689w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-3-select-2d-transformation-300x118.png 300w\" sizes=\"(max-width: 689px) 100vw, 689px\" \/><\/a><\/p>\n<p><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-3-preview.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1642\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-3-preview.png\" alt=\"\" width=\"669\" height=\"676\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-3-preview.png 669w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-3-preview-297x300.png 297w\" sizes=\"(max-width: 669px) 100vw, 669px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Here is another complex variation involving multiple JSON 2D arrays, wherein column names are present within an array of column schema documents. Additionally, values are stored in a 2D array with a sophisticated structure. The <a href=\"https:\/\/developers.google.com\/analytics\/devguides\/reporting\/data\/v1\/rest\" target=\"_blank\" rel=\"noopener\">Google Analytics Data API<\/a> also employs a similar intricate structure for data representation.<\/p>\n<pre class=\"lang:default decode:true\">{\r\n\t\"dimensionHeaders\": [{\r\n\t\t\"name\": \"transactionid\"\r\n\t}, {\r\n\t\t\"name\": \"date\"\r\n\t}, {\r\n\t\t\"name\": \"CampaignId\"\r\n\t}, {\r\n\t\t\"name\": \"CampaignName\"\r\n\t}, {\r\n\t\t\"name\": \"GoogleAdsAdGroupName\"\r\n\t}, {\r\n\t\t\"name\": \"googleAdsAdGroupId\"\r\n\t}, {\r\n\t\t\"name\": \"defaultChannelGroup\"\r\n\t}],\r\n\t\"metricHeaders\": [{\r\n\t\t\"name\": \"sessions\",\r\n\t\t\"type\": \"TYPE_INTEGER\"\r\n\t}],\r\n\t\"rows\": [{\r\n\t\t\t\"dimensionValues\": [{\r\n\t\t\t\t\"value\": \"(not set)\"\r\n\t\t\t}, {\r\n\t\t\t\t\"value\": \"20230709\"\r\n\t\t\t}, {\r\n\t\t\t\t\"value\": \"(not set)\"\r\n\t\t\t}, {\r\n\t\t\t\t\"value\": \"(referral)\"\r\n\t\t\t}, {\r\n\t\t\t\t\"value\": \"(not set)\"\r\n\t\t\t}, {\r\n\t\t\t\t\"value\": \"\"\r\n\t\t\t}, {\r\n\t\t\t\t\"value\": \"Referral\"\r\n\t\t\t}],\r\n\t\t\t\"metricValues\": [{\r\n\t\t\t\t\"value\": \"5\"\r\n\t\t\t}]\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"dimensionValues\": [{\r\n\t\t\t\t\"value\": \"(not set)\"\r\n\t\t\t}, {\r\n\t\t\t\t\"value\": \"20230711\"\r\n\t\t\t}, {\r\n\t\t\t\t\"value\": \"(not set)\"\r\n\t\t\t}, {\r\n\t\t\t\t\"value\": \"(referral)\"\r\n\t\t\t}, {\r\n\t\t\t\t\"value\": \"(not set)\"\r\n\t\t\t}, {\r\n\t\t\t\t\"value\": \"\"\r\n\t\t\t}, {\r\n\t\t\t\t\"value\": \"Referral\"\r\n\t\t\t}],\r\n\t\t\t\"metricValues\": [{\r\n\t\t\t\t\"value\": \"6\"\r\n\t\t\t}]\r\n\t\t}\r\n\t]\r\n}<\/pre>\n<p><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-3-select-filter-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-10145\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-3-select-filter-2.png\" alt=\"\" width=\"750\" height=\"859\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-3-select-filter-2.png 750w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-json-array-pattern-3-select-filter-2-262x300.png 262w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/a><\/p>\n<p>In the Column name and Values Filter, instead of specifying individual arrays (e.g., dimensionHeaders and metricHeaders), we need to use the &#8216;*&#8217; wildcard symbol to retrieve data from all arrays in a single output. This allows us to gather all the arrays&#8217; data efficiently and conveniently.<\/p>\n<p><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-multiple-2d-json-array-pattern-3-select-2d-transformation.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-10144\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-multiple-2d-json-array-pattern-3-select-2d-transformation.png\" alt=\"\" width=\"894\" height=\"507\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-multiple-2d-json-array-pattern-3-select-2d-transformation.png 894w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-multiple-2d-json-array-pattern-3-select-2d-transformation-300x170.png 300w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-parse-multiple-2d-json-array-pattern-3-select-2d-transformation-768x436.png 768w\" sizes=\"(max-width: 894px) 100vw, 894px\" \/><\/a><\/p>\n<h3><\/h3>\n<h3>Pattern 4 &#8211; Key\/Value Transformation<\/h3>\n<p>SSIS PowerPack v2.6.6 and later introduced new transformation type called Key\/Value transformation. This option Pivots dynamic Key\/Value pairs of some attributes into Columns. Zoho CRM is best use case. <a href=\"https:\/\/zappysys.com\/blog\/read-write-zoho-crm-data-using-ssis-rest-api-call\/\" target=\"_blank\" rel=\"noopener\">Fully described here<\/a>.<\/p>\n<pre class=\"lang:js decode:true \">{\r\n  \"rows\": [\r\n    {\r\n      \"rownum\": 1,\r\n      \"fields\": [\r\n        {\r\n          \"name\": \"FirstName\",\r\n          \"value\": \"Bob\"\r\n        },\r\n        {\r\n          \"name\": \"LastName\",\r\n          \"value\": \"Tylor\"\r\n        },\r\n        {\r\n          \"name\": \"Phone\",\r\n          \"value\": \"111-111-1111\"\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"rownum\": 2,\r\n      \"fields\": [\r\n        {\r\n          \"name\": \"FirstName\",\r\n          \"value\": \"Sam\"\r\n        },\r\n        {\r\n          \"name\": \"LastName\",\r\n          \"value\": \"Smith\"\r\n        },\r\n        {\r\n          \"name\": \"Phone\",\r\n          \"value\": \"222-222-2222\"\r\n        }\r\n      ]\r\n    }\r\n  ]\r\n}<\/pre>\n<p>To transform above JSON where fields appear as column (e..g FirstName, LastName and Email) you need to apply following settings on JSON Source UI.<\/p>\n<ol>\n<li>Select Filter <strong>$.rows[*]<\/strong><\/li>\n<li>Goto 2D Array Tab and select following settings\n<ol>\n<li>Transform Type = Key\/Value<\/li>\n<li>Column Name Filter =\u00a0\u00a0<strong>$.fields[*].name<\/strong><\/li>\n<li>Row Value Filter =\u00a0\u00a0<strong>$.fields[*].value<\/strong><\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-json-key-value-pivot-transform.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2665\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-json-key-value-pivot-transform.png\" alt=\"\" width=\"673\" height=\"606\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-json-key-value-pivot-transform.png 673w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-json-key-value-pivot-transform-300x270.png 300w\" sizes=\"(max-width: 673px) 100vw, 673px\" \/><\/a><\/p>\n<h4>Pattern 4.1 &#8211; Rootless JSON Array Key\/Value Transformation<\/h4>\n<p>Sometimes you might get a rootless JSON array is a JSON structure where the top level is an array, not an object. This format is common when representing collections like lists of items or Custom Columns. Parsing it requires direct access to the array and its elements without a surrounding parent object.<\/p>\n<pre class=\"lang:default decode:true\">[\r\n    {\r\n        \"name\": \"FirstName\",\r\n        \"value\": \"Bob\"\r\n    },\r\n    {\r\n        \"name\": \"LastName\",\r\n        \"value\": \"Tylor\"\r\n    },\r\n    {\r\n        \"name\": \"Phone\",\r\n        \"value\": \"111-111-1111\"\r\n    }\r\n]<\/pre>\n<p><strong>Output:<\/strong><br \/>\nFrom this JSON array&#8217;s element name should be used as the column header, and the corresponding element value should populate the relevant column.<\/p>\n<pre class=\"lang:default highlight:0 decode:true \">FirstName  |  LasteName  |  Phone\r\nBob        |  Tylor      |  111-111-1111<\/pre>\n<p>&nbsp;<br \/>\nTo parse this type of rootless JSON array, we need to use the &#8220;<strong>EnableSingleRowOutput<\/strong>&#8221; and &#8220;<strong>RawOutputDataTemplate<\/strong>&#8221; settings. These settings ensure that the array is treated as individual rows of data and that the raw JSON structure is maintained during parsing, allowing for direct access to each element within the array.<br \/>\n&nbsp;<br \/>\nTo do so Right-click on the <a href=\"https:\/\/zappysys.com\/products\/ssis-powerpack\/ssis-json-file-source\/\">JSON Source<\/a> or <a href=\"https:\/\/zappysys.com\/products\/ssis-powerpack\/ssis-json-parser-transform\/\">JSON Parser Transform<\/a>, go to &#8220;<strong>Properties<\/strong>&#8221;<\/p>\n<ul>\n<li>Search for &#8220;<strong>EnableSingleRowOutput<\/strong>&#8220;, and set its value to `<strong>True<\/strong>`<\/li>\n<li>Next, search for the property &#8220;<strong>RawOutputDataTemplate<\/strong>&#8221; and set its value as `<strong>{data: [$1]}<\/strong>`<\/li>\n<\/ul>\n<div id=\"attachment_11149\" style=\"width: 693px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-json-source-enable-single-row-output.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-11149\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-json-source-enable-single-row-output.jpg\" alt=\"ssis-json-source-enable-single-row-output\" width=\"683\" height=\"655\" class=\"size-full wp-image-11149\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-json-source-enable-single-row-output.jpg 683w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-json-source-enable-single-row-output-300x288.jpg 300w\" sizes=\"(max-width: 683px) 100vw, 683px\" \/><\/a><p id=\"caption-attachment-11149\" class=\"wp-caption-text\">SSIS JSON Source EnableSingleRowOutput and RawOutputDataTemplate Property<\/p><\/div>\n&nbsp;<br \/>\nNow, under the <a href=\"https:\/\/zappysys.com\/products\/ssis-powerpack\/ssis-json-file-source\/\">JSON Source<\/a> or <a href=\"https:\/\/zappysys.com\/products\/ssis-powerpack\/ssis-json-parser-transform\/\">JSON Parser Transform<\/a>.<\/p>\n<ul>\n<li>Navigate to the &#8220;<strong>Array Transform<\/strong>&#8221; tab.<\/li>\n<li>Set the Transform Type to &#8220;<strong>Key\/Value to Columns<\/strong>&#8220;<\/li>\n<li>Then select the desired &#8220;<strong>Column Name Filter<\/strong>&#8220;<\/li>\n<li>And select the desired &#8220;<strong>Row Values Filter<\/strong>&#8220;<\/li>\n<\/ul>\n<p>That&#8217;s it! Click the &#8216;Preview&#8217; button in the JSON source, and at runtime, you&#8217;ll get the desired output like this:<br \/>\n<div id=\"attachment_11150\" style=\"width: 810px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/rootless-json-array-pattern.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-11150\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/rootless-json-array-pattern.png\" alt=\"rootless-json-array-pattern\" width=\"800\" height=\"747\" class=\"size-full wp-image-11150\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/rootless-json-array-pattern.png 800w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/rootless-json-array-pattern-300x280.png 300w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/rootless-json-array-pattern-768x717.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><p id=\"caption-attachment-11150\" class=\"wp-caption-text\">Parse Rootless JSON Array Using JSON Source<\/p><\/div>\n&nbsp;<br \/>\nIf you have multiple JSON array columns in the source\/output dataset, in that case you can use multiple JSON Parsers to handle each respective JSON array column. <\/p>\n<p>You can find a sample article and a video tutorial here: <a href=\"https:\/\/zappysys.zendesk.com\/hc\/en-us\/articles\/115004905353-Reading-multiple-arrays-from-JSON-XML-in-SSIS\">Reading Multiple Arrays from JSON\/XML in SSIS.<\/a><br \/>\n<strong>Multicast approach (the recommended way):<\/strong><\/p>\n<div><em><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/zappysys.com\/onlinehelp\/ssis-powerpack\/scr\/images\/json-parser-transform\/ssis-json-extract-multiple-array-output-using-parser.png?resize=720%2C513&amp;ssl=1\" alt=\"Extract multiple array output from JSON file \/ REST API response in (SSIS JSON Source, JSON Parser Transform)\" width=\"702\" height=\"500\"><\/em><\/div>\n<h3>Pattern 5 &#8211; Multiple Columns with Expressions (Google Geocoding API Usecase)<\/h3>\n<p>(<strong>Version 2.7.4\u00a0or higher<\/strong>) If you have a\u00a0use case to include additional columns in the output based on multiple JSONPath expressions then you can use below option. This is useful for API such as <a href=\"https:\/\/developers.google.com\/maps\/documentation\/geocoding\/start\" target=\"_blank\" rel=\"noopener\">Google GeoCoding API<\/a><\/p>\n<p>Assume that you have following JSON as input (For demo use Direct Value Mode). You want to extract Address Components into Columns. Perform the\u00a0following steps to paste such JSON.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"lang:js decode:true \">{\r\n   \"results\" : [\r\n      {\r\n         \"address_components\" : [\r\n            {\r\n               \"long_name\" : \"1455\",\r\n               \"short_name\" : \"1455\",\r\n               \"types\" : [ \"street_number\" ]\r\n            },\r\n            {\r\n               \"long_name\" : \"Gateview Circle Northeast\",\r\n               \"short_name\" : \"Gateview Cir NE\",\r\n               \"types\" : [ \"route\" ]\r\n            },\r\n            {\r\n               \"long_name\" : \"Marietta\",\r\n               \"short_name\" : \"Marietta\",\r\n               \"types\" : [ \"locality\", \"political\" ]\r\n            },\r\n            {\r\n               \"long_name\" : \"Cobb County\",\r\n               \"short_name\" : \"Cobb County\",\r\n               \"types\" : [ \"administrative_area_level_2\", \"political\" ]\r\n            },\r\n            {\r\n               \"long_name\" : \"Georgia\",\r\n               \"short_name\" : \"GA\",\r\n               \"types\" : [ \"administrative_area_level_1\", \"political\" ]\r\n            },\r\n            {\r\n               \"long_name\" : \"United States\",\r\n               \"short_name\" : \"US\",\r\n               \"types\" : [ \"country\", \"political\" ]\r\n            },\r\n            {\r\n               \"long_name\" : \"30062\",\r\n               \"short_name\" : \"30062\",\r\n               \"types\" : [ \"postal_code\" ]\r\n            },\r\n            {\r\n               \"long_name\" : \"2176\",\r\n               \"short_name\" : \"2176\",\r\n               \"types\" : [ \"postal_code_suffix\" ]\r\n            }\r\n         ],\r\n         \"formatted_address\" : \"1455 Gateview Cir NE, Marietta, GA 30062, USA\",\r\n         \"geometry\" : {\r\n            \"bounds\" : {\r\n               \"northeast\" : {\r\n                  \"lat\" : 33.9863736,\r\n                  \"lng\" : -84.5125815\r\n               },\r\n               \"southwest\" : {\r\n                  \"lat\" : 33.9862069,\r\n                  \"lng\" : -84.5127193\r\n               }\r\n            },\r\n            \"location\" : {\r\n               \"lat\" : 33.9863117,\r\n               \"lng\" : -84.51265389999999\r\n            },\r\n            \"location_type\" : \"ROOFTOP\",\r\n            \"viewport\" : {\r\n               \"northeast\" : {\r\n                  \"lat\" : 33.98763923029151,\r\n                  \"lng\" : -84.51130141970849\r\n               },\r\n               \"southwest\" : {\r\n                  \"lat\" : 33.98494126970851,\r\n                  \"lng\" : -84.51399938029151\r\n               }\r\n            }\r\n         },\r\n         \"place_id\" : \"ChIJhUujpoIT9YgRVnSiltZkv0U\",\r\n         \"types\" : [ \"premise\" ]\r\n      },\r\n      \r\n      {\r\n         \"address_components\" : [\r\n            {\r\n               \"long_name\" : \"1485\",\r\n               \"short_name\" : \"1485\",\r\n               \"types\" : [ \"street_number\" ]\r\n            },\r\n            {\r\n               \"long_name\" : \"Gateview Way Northeast\",\r\n               \"short_name\" : \"Gateview Way NE\",\r\n               \"types\" : [ \"route\" ]\r\n            },\r\n            {\r\n               \"long_name\" : \"Marietta\",\r\n               \"short_name\" : \"Marietta\",\r\n               \"types\" : [ \"locality\", \"political\" ]\r\n            },\r\n            {\r\n               \"long_name\" : \"Cobb County\",\r\n               \"short_name\" : \"Cobb County\",\r\n               \"types\" : [ \"administrative_area_level_2\", \"political\" ]\r\n            },\r\n            {\r\n               \"long_name\" : \"Georgia\",\r\n               \"short_name\" : \"GA\",\r\n               \"types\" : [ \"administrative_area_level_1\", \"political\" ]\r\n            },\r\n            {\r\n               \"long_name\" : \"United States\",\r\n               \"short_name\" : \"US\",\r\n               \"types\" : [ \"country\", \"political\" ]\r\n            },\r\n            {\r\n               \"long_name\" : \"30066\",\r\n               \"short_name\" : \"30062\",\r\n               \"types\" : [ \"postal_code\" ]\r\n            },\r\n            {\r\n               \"long_name\" : \"2176\",\r\n               \"short_name\" : \"2176\",\r\n               \"types\" : [ \"postal_code_suffix\" ]\r\n            }\r\n         ],\r\n         \"formatted_address\" : \"1481 Gateview Cir NE, Marietta, GA 30062, USA\",\r\n         \"geometry\" : {\r\n            \"bounds\" : {\r\n               \"northeast\" : {\r\n                  \"lat\" : 33.9863736,\r\n                  \"lng\" : -84.5125815\r\n               },\r\n               \"southwest\" : {\r\n                  \"lat\" : 33.9862069,\r\n                  \"lng\" : -84.5127193\r\n               }\r\n            },\r\n            \"location\" : {\r\n               \"lat\" : 33.9863117,\r\n               \"lng\" : -84.51265389999999\r\n            },\r\n            \"location_type\" : \"ROOFTOP\",\r\n            \"viewport\" : {\r\n               \"northeast\" : {\r\n                  \"lat\" : 33.98763923029151,\r\n                  \"lng\" : -84.51130141970849\r\n               },\r\n               \"southwest\" : {\r\n                  \"lat\" : 33.12233444,\r\n                  \"lng\" : -84.3434343434\r\n               }\r\n            }\r\n         },\r\n         \"place_id\" : \"DuIJhUujpoIT9YgRVnSiltZkvCH\",\r\n         \"types\" : [ \"premise\" ]\r\n      }      \r\n   ],\r\n   \"status\" : \"OK\"\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p>Steps to Parse JSON using Multiple Expressions<\/p>\n<ol>\n<li>Drag and drop ZS JSON Source inside Data Flow Designer surface<\/li>\n<li>Double click to edit component<\/li>\n<li>Select Direct Value Mode and enter sample JSON (See above example)<\/li>\n<li>Select Filter or enter manually\u00a0\u00a0<strong>$.results[*]<\/strong><\/li>\n<li>Go to <strong>2D Array Transformation<\/strong> Tab<\/li>\n<li>Select Transformation Type as <strong>Multiple columns using Expressions<\/strong><\/li>\n<li>Click Configure Columns. You can now enter column name and expression to extract value for that column. Your expression must return only a single value.<br \/>\nFor Example, we entered expressions like below<\/p>\n<pre class=\"lang:js decode:true \">Column =&gt;\u00a0street_number\r\nExpression =&gt;\u00a0$.address_components[?(@.types[0]=='street_number')].long_name\r\n--------------------------------------------------------------------------\r\nColumn =&gt;\u00a0street_name\r\nExpression =&gt;\u00a0$.address_components[?(@.types[0]=='street_name')].long_name\r\n--------------------------------------------------------------------------\r\nColumn =&gt;\u00a0city\r\nExpression =&gt;\u00a0$.address_components[?(@.types[0]=='city')].long_name\r\n...............\r\n...............\r\n...............<\/pre>\n<div id=\"attachment_4517\" style=\"width: 835px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-google-geocode-api-example-parse-multiple-columns-jsonpath-expressions.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-4517\" class=\"size-full wp-image-4517\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-google-geocode-api-example-parse-multiple-columns-jsonpath-expressions.png\" alt=\"Pattern 5- Multiple Columns Using JSONPath Expressions (Google Geocoding API example)\" width=\"825\" height=\"683\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-google-geocode-api-example-parse-multiple-columns-jsonpath-expressions.png 825w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-google-geocode-api-example-parse-multiple-columns-jsonpath-expressions-300x248.png 300w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/ssis-google-geocode-api-example-parse-multiple-columns-jsonpath-expressions-768x636.png 768w\" sizes=\"(max-width: 825px) 100vw, 825px\" \/><\/a><p id=\"caption-attachment-4517\" class=\"wp-caption-text\">Pattern 5- Multiple Columns Using JSONPath Expressions (Google Geocoding API example)<\/p><\/div><\/li>\n<li>Now click Preview to see parsed data. As you see along with other columns we also got additional columns using complex JSONPath expressions.\n<div id=\"attachment_4518\" style=\"width: 820px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/clean-parse-addresses-using-google-geocode-api-ssis.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-4518\" class=\"size-full wp-image-4518\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/clean-parse-addresses-using-google-geocode-api-ssis.png\" alt=\"Preview Cleaned \/ Parsed Addresses from Google Geocoding API response\" width=\"810\" height=\"566\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/clean-parse-addresses-using-google-geocode-api-ssis.png 810w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/clean-parse-addresses-using-google-geocode-api-ssis-300x210.png 300w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/clean-parse-addresses-using-google-geocode-api-ssis-768x537.png 768w\" sizes=\"(max-width: 810px) 100vw, 810px\" \/><\/a><p id=\"caption-attachment-4518\" class=\"wp-caption-text\">Preview Cleaned \/ Parsed Addresses from Google Geocoding API response<\/p><\/div><\/li>\n<\/ol>\n<h2><\/h2>\n<h3>Pattern 6 &#8211; Columnless array<\/h3>\n<p>In this pattern you have 2D array without any property name in JSON like below. For this select Columnless Array option on 2D Transform Tab. You can also define custom columns if you dont like default names.<\/p>\n<pre class=\"lang:default decode:true\">[\r\n [1, \"AAA\", \"2012-01-01\"],\r\n [2, \"BBB\", \"2015-01-21\"],\r\n [3, \"CCC\", \"2017-01-31\"]\r\n]<\/pre>\n<p>OR API Patterns like <a href=\"https:\/\/zappysys.com\/blog\/get-data-google-spreadsheet-using-ssis\/\" target=\"_blank\" rel=\"noopener\">Google Sheet API<\/a><\/p>\n<pre class=\"lang:default highlight:0 decode:true\">{\r\n  \"range\": \"Sheet1!A1:D5\",\r\n  \"majorDimension\": \"ROWS\",\r\n  \"values\": [\r\n    [\"Item\", \"Cost\", \"Stocked\", \"Ship Date\"],\r\n    [\"Wheel\", \"$20.50\", \"4\", \"3\/1\/2016\"],\r\n    [\"Door\", \"$15\", \"2\", \"3\/15\/2016\"],\r\n    [\"Engine\", \"$100\", \"1\", \"30\/20\/2016\"],\r\n    [\"Totals\", \"$135.5\", \"7\", \"3\/20\/2016\"]\r\n  ],\r\n}<\/pre>\n<h4>Manually supply column names<\/h4>\n<p>If you want to enter column names manually then use below setting. If you do not enter comma separated list of columns then system will auto generate names based on total columns found.<\/p>\n<div id=\"attachment_7101\" style=\"width: 772px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/parse-json-array-muti-dimensional-without-name.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-7101\" class=\"size-full wp-image-7101\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/parse-json-array-muti-dimensional-without-name.png\" alt=\"Parse JSON Array without any column names \/ property\" width=\"762\" height=\"499\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/parse-json-array-muti-dimensional-without-name.png 762w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/parse-json-array-muti-dimensional-without-name-300x196.png 300w\" sizes=\"(max-width: 762px) 100vw, 762px\" \/><\/a><p id=\"caption-attachment-7101\" class=\"wp-caption-text\">Parse JSON Array without any column names \/ property<\/p><\/div>\n<h4>Auto detect column names from first line<\/h4>\n<p>As we mentioned that API like Google Sheets might send you column names as Row data in first line. In such case you can use new option provided in v3.1.2 or later as below. If you 2D array is nested like below screenshot (e.g. under Values node) then you have to supply Array Filter on Filter Options Tab. In this case its <span class=\"lang:default decode:true crayon-inline \">$.values[*]<\/span>\u00a0. As you can see when we checked First line has column names option it autodetected column names.<\/p>\n<div id=\"attachment_9118\" style=\"width: 645px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/columnless-array-first-line-has-names-pattern.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-9118\" class=\"size-full wp-image-9118\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/columnless-array-first-line-has-names-pattern.png\" alt=\"JSON With 2D Array with Column names in First Row (Google Sheets API Pattern)\" width=\"635\" height=\"669\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/columnless-array-first-line-has-names-pattern.png 635w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/columnless-array-first-line-has-names-pattern-285x300.png 285w\" sizes=\"(max-width: 635px) 100vw, 635px\" \/><\/a><p id=\"caption-attachment-9118\" class=\"wp-caption-text\">JSON With 2D Array with Column names in First Row (Google Sheets API Pattern)<\/p><\/div>\n<h3>Pattern 7 &#8211; JSON Line format (JSONL) &#8211; New line separated<\/h3>\n<p>Version 3.1.2 and later you can use option to parse <a href=\"http:\/\/jsonlines.org\/examples\/\">JSON Line format<\/a>. In JSON Line (also known as <strong>JSONL<\/strong>\u00a0) record separator is \\n or \\r\\n. There are two versions of JSONL format.<\/p>\n<ol>\n<li><span style=\"text-decoration: underline;\">JSON Object Format<\/span> &#8211; Using <span class=\"lang:default decode:true crayon-inline \">{ }<\/span>\u00a0 brackets around record (Also referred as Multi-Content Format). For This format you do not need any special settings in ZappySys. Its automatically detected and parsed correctly.<br \/>\n<strong>Example:<\/strong><\/p>\n<pre class=\"lang:js decode:true\">{ Id:1, Name: \"AAA\" }\r\n{ Id:2, Name: \"BBB\" }\r\n{ Id:3, Name: \"CCC\" }<\/pre>\n<\/li>\n<li>JSON Array Format &#8211;\u00a0Using <span class=\"lang:default decode:true crayon-inline\">[ ]<\/span>\u00a0 brackets around record. Typically this format is used with First line as Columns and other lines as Data.<br \/>\n<strong>Example:<\/strong><\/p>\n<pre class=\"lang:js decode:true\">[\"Id\",\"Name\"]\r\n[1,\"AAA\"]\r\n[2,\"BBB\"]\r\n[3,\"CCC\"]<\/pre>\n<\/li>\n<\/ol>\n<p>As we said First Example is automatically Parsed by ZappySys but for 2nd example (Array format) you have to use below Settings.<\/p>\n<div id=\"attachment_8906\" style=\"width: 692px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/parse-json-line-format-jsonl-with-header.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-8906\" class=\"size-full wp-image-8906\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/parse-json-line-format-jsonl-with-header.png\" alt=\"Parsing JSON Lines \/ JSONL Data Format (JSON Array Separated by new line)\" width=\"682\" height=\"528\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/parse-json-line-format-jsonl-with-header.png 682w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/parse-json-line-format-jsonl-with-header-300x232.png 300w\" sizes=\"(max-width: 682px) 100vw, 682px\" \/><\/a><p id=\"caption-attachment-8906\" class=\"wp-caption-text\">Parsing JSON Lines \/ JSONL Data Format (JSON Array Separated by new line)<\/p><\/div>\n<h2>Pattern 8 &#8211; Columnless Value Array with Pivot<\/h2>\n<p>If you have data like below without any property name and all in single dimension\u00a0 array then you can use new option introduced after v3.1.3 &#8220;<strong>Pivot &#8211; Columnless Array<\/strong>&#8221; on array transformation tab. This option is not same as Pivot Option found on Pivot Tab (See next section). This option only works when you have no property name for array you like to transform. If you have property name for array then use option as described in the next section.<\/p>\n<pre class=\"lang:default highlight:0 decode:true\">[\"one\",\"two\",null]<\/pre>\n<p><strong>Output:<\/strong><\/p>\n<pre class=\"lang:default highlight:0 decode:true \">data\r\n------------\r\none\r\ntwo\r\nnull<\/pre>\n<div id=\"attachment_9104\" style=\"width: 492px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/pivot-columnless-json-array.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-9104\" class=\"size-full wp-image-9104\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/pivot-columnless-json-array.png\" alt=\"Pattern 8 - Pivot Columnless Array\" width=\"482\" height=\"355\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/pivot-columnless-json-array.png 482w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/08\/pivot-columnless-json-array-300x221.png 300w\" sizes=\"(max-width: 482px) 100vw, 482px\" \/><\/a><p id=\"caption-attachment-9104\" class=\"wp-caption-text\">Pattern 8 &#8211; Pivot Columnless Array<\/p><\/div>\n<p>&nbsp;<\/p>\n<h2>Pivot JSON \/ XML data<\/h2>\n<p>Now let&#8217;s consider little different scenario. If you don&#8217;t have JSON Array (See below sample) and your values are part of property name (in below case ProductCode &#8211; P001, P002&#8230; is actually Property name rather than value).\u00a0 In this case you need to use <strong>Pivot Option<\/strong>. <a href=\"https:\/\/zappysys.com\/blog\/pivot-json-xml-data-using-ssis-odbc-drivers\/\" target=\"_blank\" rel=\"noopener\">Check this article for full detail<\/a>.<\/p>\n<pre class=\"lang:js decode:true \">{\r\n\t\"version\": 1.0,\r\n\t\"products\": {\r\n\t\t\"P001\": {\r\n\t\t\t\"name\": \"Product 1\",\r\n\t\t\t\"price\": 10\r\n\t\t},\r\n\t\t\"P002\": {\r\n\t\t\t\"name\": \"Product 2\",\r\n\t\t\t\"price\": 11\r\n\t\t},\r\n\t\t\"P003\": {\r\n\t\t\t\"name\": \"Product 3\",\r\n\t\t\t\"price\": 12\r\n\t\t}\r\n\t}\r\n}<\/pre>\n<div id=\"attachment_7977\" style=\"width: 691px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2019\/09\/pivot-json-xml-data-option.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-7977\" class=\"size-full wp-image-7977\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2019\/09\/pivot-json-xml-data-option.png\" alt=\"Pivot JSON \/ XML Data option for ZappySys API Connectors \/ Drivers\" width=\"681\" height=\"120\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2019\/09\/pivot-json-xml-data-option.png 681w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2019\/09\/pivot-json-xml-data-option-300x53.png 300w\" sizes=\"(max-width: 681px) 100vw, 681px\" \/><\/a><p id=\"caption-attachment-7977\" class=\"wp-caption-text\">Pivot JSON \/ XML Data option for ZappySys API Connectors \/ Drivers<\/p><\/div>\n&nbsp;<\/p>\n<div id=\"attachment_7976\" style=\"width: 789px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2019\/09\/ssis-json-pivot-data-options.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-7976\" class=\"size-full wp-image-7976\" src=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2019\/09\/ssis-json-pivot-data-options.png\" alt=\"Pivot JSON Data using SSIS JSON Source\" width=\"779\" height=\"744\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2019\/09\/ssis-json-pivot-data-options.png 779w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2019\/09\/ssis-json-pivot-data-options-300x287.png 300w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2019\/09\/ssis-json-pivot-data-options-768x733.png 768w\" sizes=\"(max-width: 779px) 100vw, 779px\" \/><\/a><p id=\"caption-attachment-7976\" class=\"wp-caption-text\">Pivot JSON Data using SSIS JSON Source<\/p><\/div>\n<h2><\/h2>\n<h2>Conclusion<\/h2>\n<p>Using <a href=\"https:\/\/zappysys.com\/products\/ssis-powerpack\/\">SSIS PowerPack<\/a> or <a href=\"https:\/\/zappysys.com\/products\/odbc-powerpack\/\">ODBC PowerPack<\/a>\u00a0you can transform complex JSON in a few clicks. Both products support all options listed in this article. Based on your use case you can either use ZappySys Drivers or use SSIS Connectors.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction In our previous post we saw how to parse JSON arrays. Now let&#8217;s look at more advanced techniques to parse multi-dimensional JSON array in SSIS ( \u00a0e.g. 2D &#8211; JSON array inside array). We will use SSIS JSON Source to parse complex nested JSON in few clicks. Tips and Tricks mentioned in this article [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1573,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[6,224,12,148],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\r\n<title>Parse JSON array in SSIS or ODBC Drivers | ZappySys Blog<\/title>\r\n<meta name=\"description\" content=\"In this post learn how to parse multi-dimensional JSON array using various techniques. Use SSIS JSON Source to read 2D JSON arrays in few clicks.\" \/>\r\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\r\n<link rel=\"canonical\" href=\"https:\/\/zappysys.com\/blog\/parse-multi-dimensional-json-array-ssis\/\" \/>\r\n<meta property=\"og:locale\" content=\"en_US\" \/>\r\n<meta property=\"og:type\" content=\"article\" \/>\r\n<meta property=\"og:title\" content=\"Parse JSON array in SSIS or ODBC Drivers | ZappySys Blog\" \/>\r\n<meta property=\"og:description\" content=\"In this post learn how to parse multi-dimensional JSON array using various techniques. Use SSIS JSON Source to read 2D JSON arrays in few clicks.\" \/>\r\n<meta property=\"og:url\" content=\"https:\/\/zappysys.com\/blog\/parse-multi-dimensional-json-array-ssis\/\" \/>\r\n<meta property=\"og:site_name\" content=\"ZappySys Blog\" \/>\r\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/ZappySys\/\" \/>\r\n<meta property=\"article:published_time\" content=\"2017-08-03T02:55:02+00:00\" \/>\r\n<meta property=\"article:modified_time\" content=\"2024-09-23T08:03:33+00:00\" \/>\r\n<meta property=\"og:image\" content=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/07\/ssis-get-data-google-bigquery-select-json-filter.png\" \/>\r\n\t<meta property=\"og:image:width\" content=\"675\" \/>\r\n\t<meta property=\"og:image:height\" content=\"363\" \/>\r\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\r\n<meta name=\"author\" content=\"ZappySys\" \/>\r\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\r\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/zappysys\/\" \/>\r\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"ZappySys\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutes\" \/>\r\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/zappysys.com\/blog\/parse-multi-dimensional-json-array-ssis\/\",\"url\":\"https:\/\/zappysys.com\/blog\/parse-multi-dimensional-json-array-ssis\/\",\"name\":\"Parse JSON array in SSIS or ODBC Drivers | ZappySys Blog\",\"isPartOf\":{\"@id\":\"https:\/\/zappysys.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/zappysys.com\/blog\/parse-multi-dimensional-json-array-ssis\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/zappysys.com\/blog\/parse-multi-dimensional-json-array-ssis\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/07\/ssis-get-data-google-bigquery-select-json-filter.png\",\"datePublished\":\"2017-08-03T02:55:02+00:00\",\"dateModified\":\"2024-09-23T08:03:33+00:00\",\"author\":{\"@id\":\"https:\/\/zappysys.com\/blog\/#\/schema\/person\/2756c237457fbc95d82cb38962f81f82\"},\"description\":\"In this post learn how to parse multi-dimensional JSON array using various techniques. Use SSIS JSON Source to read 2D JSON arrays in few clicks.\",\"breadcrumb\":{\"@id\":\"https:\/\/zappysys.com\/blog\/parse-multi-dimensional-json-array-ssis\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/zappysys.com\/blog\/parse-multi-dimensional-json-array-ssis\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/zappysys.com\/blog\/parse-multi-dimensional-json-array-ssis\/#primaryimage\",\"url\":\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/07\/ssis-get-data-google-bigquery-select-json-filter.png\",\"contentUrl\":\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/07\/ssis-get-data-google-bigquery-select-json-filter.png\",\"width\":675,\"height\":363,\"caption\":\"Select Filter\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/zappysys.com\/blog\/parse-multi-dimensional-json-array-ssis\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/zappysys.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Parse JSON array in SSIS or ODBC Drivers\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/zappysys.com\/blog\/#website\",\"url\":\"https:\/\/zappysys.com\/blog\/\",\"name\":\"ZappySys Blog\",\"description\":\"SSIS \/ ODBC Drivers \/ API Connectors for JSON, XML, Azure, Amazon AWS, Salesforce, MongoDB and more\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/zappysys.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/zappysys.com\/blog\/#\/schema\/person\/2756c237457fbc95d82cb38962f81f82\",\"name\":\"ZappySys\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/zappysys.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5c9be148088ba9b8af8e955c5f7c22b5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5c9be148088ba9b8af8e955c5f7c22b5?s=96&d=mm&r=g\",\"caption\":\"ZappySys\"},\"sameAs\":[\"http:\/\/www.zappysys.com\/\",\"https:\/\/www.facebook.com\/ZappySys\/\",\"https:\/\/twitter.com\/https:\/\/twitter.com\/zappysys\/\"],\"url\":\"https:\/\/zappysys.com\/blog\/author\/admin\/\"}]}<\/script>\r\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Parse JSON array in SSIS or ODBC Drivers | ZappySys Blog","description":"In this post learn how to parse multi-dimensional JSON array using various techniques. Use SSIS JSON Source to read 2D JSON arrays in few clicks.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/zappysys.com\/blog\/parse-multi-dimensional-json-array-ssis\/","og_locale":"en_US","og_type":"article","og_title":"Parse JSON array in SSIS or ODBC Drivers | ZappySys Blog","og_description":"In this post learn how to parse multi-dimensional JSON array using various techniques. Use SSIS JSON Source to read 2D JSON arrays in few clicks.","og_url":"https:\/\/zappysys.com\/blog\/parse-multi-dimensional-json-array-ssis\/","og_site_name":"ZappySys Blog","article_author":"https:\/\/www.facebook.com\/ZappySys\/","article_published_time":"2017-08-03T02:55:02+00:00","article_modified_time":"2024-09-23T08:03:33+00:00","og_image":[{"width":675,"height":363,"url":"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/07\/ssis-get-data-google-bigquery-select-json-filter.png","type":"image\/png"}],"author":"ZappySys","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/zappysys\/","twitter_misc":{"Written by":"ZappySys","Est. reading time":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/zappysys.com\/blog\/parse-multi-dimensional-json-array-ssis\/","url":"https:\/\/zappysys.com\/blog\/parse-multi-dimensional-json-array-ssis\/","name":"Parse JSON array in SSIS or ODBC Drivers | ZappySys Blog","isPartOf":{"@id":"https:\/\/zappysys.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/zappysys.com\/blog\/parse-multi-dimensional-json-array-ssis\/#primaryimage"},"image":{"@id":"https:\/\/zappysys.com\/blog\/parse-multi-dimensional-json-array-ssis\/#primaryimage"},"thumbnailUrl":"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/07\/ssis-get-data-google-bigquery-select-json-filter.png","datePublished":"2017-08-03T02:55:02+00:00","dateModified":"2024-09-23T08:03:33+00:00","author":{"@id":"https:\/\/zappysys.com\/blog\/#\/schema\/person\/2756c237457fbc95d82cb38962f81f82"},"description":"In this post learn how to parse multi-dimensional JSON array using various techniques. Use SSIS JSON Source to read 2D JSON arrays in few clicks.","breadcrumb":{"@id":"https:\/\/zappysys.com\/blog\/parse-multi-dimensional-json-array-ssis\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zappysys.com\/blog\/parse-multi-dimensional-json-array-ssis\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zappysys.com\/blog\/parse-multi-dimensional-json-array-ssis\/#primaryimage","url":"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/07\/ssis-get-data-google-bigquery-select-json-filter.png","contentUrl":"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/07\/ssis-get-data-google-bigquery-select-json-filter.png","width":675,"height":363,"caption":"Select Filter"},{"@type":"BreadcrumbList","@id":"https:\/\/zappysys.com\/blog\/parse-multi-dimensional-json-array-ssis\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zappysys.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Parse JSON array in SSIS or ODBC Drivers"}]},{"@type":"WebSite","@id":"https:\/\/zappysys.com\/blog\/#website","url":"https:\/\/zappysys.com\/blog\/","name":"ZappySys Blog","description":"SSIS \/ ODBC Drivers \/ API Connectors for JSON, XML, Azure, Amazon AWS, Salesforce, MongoDB and more","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/zappysys.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/zappysys.com\/blog\/#\/schema\/person\/2756c237457fbc95d82cb38962f81f82","name":"ZappySys","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zappysys.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/5c9be148088ba9b8af8e955c5f7c22b5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5c9be148088ba9b8af8e955c5f7c22b5?s=96&d=mm&r=g","caption":"ZappySys"},"sameAs":["http:\/\/www.zappysys.com\/","https:\/\/www.facebook.com\/ZappySys\/","https:\/\/twitter.com\/https:\/\/twitter.com\/zappysys\/"],"url":"https:\/\/zappysys.com\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/posts\/1636"}],"collection":[{"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/comments?post=1636"}],"version-history":[{"count":38,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/posts\/1636\/revisions"}],"predecessor-version":[{"id":11169,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/posts\/1636\/revisions\/11169"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/media\/1573"}],"wp:attachment":[{"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/media?parent=1636"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/categories?post=1636"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/tags?post=1636"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}