ImportJson

Description

Inserts data from a JSON string into a DataWindow control, DataStore object, or DataWindowChild object.

The JSON string must comply with the simple or standard format.

ImportJson function will fail to import data properly, if the DataWindow is in query mode.

Applies to

DataWindow type

Method applies to

PowerBuilder

DataWindow control, DataWindowChild object, and DataStore object, except for those with the Composite, Crosstab, OLE 2.0, or RichText presentation styles.


Syntax

PowerBuilder

long dwcontrol.ImportJson( string json {, string error} {, DWBuffer dwbuffer {, long startrow {, long endrow {, long startcolumn {, long endcolumn {, long dwstartcolumn } } } } } } )

Argument

Description

dwcontrol

A reference to a DataWindow control, DataStore, or DataWindowChild.

json

A string specifying the JSON data. The JSON string must comply with the simple or standard format.

error (optional)

A variable into which the returned warning or error message will be placed.

When there are a large amount of error messages, the error information will only display the total number of errors, and the detailed message of the first 10 errors.

The import warning caused by data type mismatch will not affect the return value of ImportJson; although the data of the mismatched columns will not be imported, the rest columns (even only one column) that are matched will be imported successfully; and that row will be regarded as a successful import and counted into the return value.

The import error caused by DW presentation style mismatch, invalid arguments, startrow value greater than the number of rows, etc. will be regarded as a failure, and represented by a negative return value of ImportJson, instead of being placed into this variable. See the Return Value section for more.

Most of the messages placed into this variable are warnings (such as data type mismatch) rather than errors. Developers can adjust the JSON data according to the message or simply ignore the message if the problematic column is not critical and the corresponding DataWindow column can be left blank.

dwbuffer (optional)

A value of the dwBuffer enumerated datatype identifying the DataWindow buffer from which you want to import the data. For a list of valid values, see DWBuffer.

For simple JSON: If not specified, imports the JSON data to the Primary! buffer. If specified, imports the JSON data to the specified buffer.

For standard (DataWindow) JSON: If not specified, imports data from all of the buffers from the JSON string to the corresponding buffers and, if any, imports the data for DataWindowChild. If specified, imports data from the specified buffer from the JSON string to the corresponding buffer.

startrow (optional)

The number of the first detail object in the JSON array that you want to import. The default is 1. If it is 0 or negative, 1 is used.

endrow (optional)

The number of the last detail object in the JSON array that you want to import. The default is the rest of the objects. If it is 0 or negative, it indicates the rest of rows.

startcolumn (optional)

The number of the first key value in the JSON object that you want to import. The default is 1. If it is 0 or negative, 1 is used.

endcolumn (optional)

The number of the last key value in the JSON object that you want to import. The default is the rest of the key values. If it is 0 or negative, it indicates the rest of columns.

dwstartcolumn (optional)

The number of the first column in the DataWindow control, DataStore or DataWindowChild that should receive data. The default is 1. If it is 0 or negative, 1 is used.


Return value

Long. Returns the number of rows that were imported if it succeeds and one of the following negative integers if an error occurs. The return value will count the rows imported into the primary, filter, and delete buffers, but not the rows imported into DataWindowChild.

0 -- When all of the data in the JSON string is null or the JSON string only contains data for DataWindowChild.

-1 -- General error.

-2 -- No row is supplied or the startrow value supplied is greater than the number of rows in the JSON data.

-3 -- Invalid argument.

-4 -- Invalid JSON.

-5 -- JSON format error.

-6 -- Unsupported DataWindow presentation style for import.

-7 -- Error resolving DataWindow nesting.

-8 -- Unsupported mapping-method value.

The method returns null if any of the following:

  • any argument's value is null

  • the DataWindow object (dataobject) is invalid

Usage

There is no forced conversion between strings and numbers. For example, the number 123 in JSON string will not be imported into the DataWindow column of char(10) type. For such case, a data type mismatch warning will be recorded in the error argument.

A boolean value (true or false) will be converted to 0 or 1 when imported from the JSON string to the DataWindow; however, 0 or 1 will not be converted to a boolean value (true or false) when exported from the DataWindow to the JSON string.

If the string length in JSON is larger than the string length in DataWindow, the string will be truncated when imported into the DataWindow. For example, JSON string [{"name":"TestForTrancate"}] is imported as "Test" when the data type of DataWindow column "name" is char(4).

When the number value is imported from the JSON string to the DataWindow column of number data type (with uncertain precision), the value will have uncertain decimals, for example, 6.78 becomes 6.78000020980835 after imported from the JSON string to the DataWindow.

Examples

This example gets data of simple-format JSON format from the server and imports into the primary buffer of the DataWindow:

int li_rc
long ll_RowCount
string ls_SimpleJson
HttpClient lnv_HttpClient

lnv_HttpClient = create HttpClient

// send request using GET method
li_rc=lnv_HttpClient.SendRequest("GET","http://demo.appeon.com/PB/webapi_client/employee/102")
// obtain the response data
if li_rc = 1 and lnv_HttpClient.GetResponseStatusCode() = 200 then
  lnv_HttpClient.GetResponseBody(ls_SimpleJson)
  ll_RowCount = dw_1.ImportJson(ls_SimpleJson)
end if

This example imports data (and state) from a standard-format JSON string into the DataWindowChild and all of the buffers of the DataWindow (see an example of a standard-format JSON string):

long ll_RowCount
string ls_StandardJson, ls_Error

//Standard JSON
ls_StandardJson = … 
ll_RowCount = dw_1.ImportJson(ls_StandardJson, ls_Error)

//Checks if any error
IF isnull(ll_RowCount) Then
 Messagebox("Error", "The method returns null")
ElseIf ll_RowCount < 0 Then
 If len(ls_Error) > 0 Then
  Messagebox("Failed","Return Value: " + String(ll_RowCount) &
      + "~r~nWith error information:~r~n" + ls_Error)
 Else
  Messagebox("Failed","Return Value: "+String(ll_RowCount))
 End If
Else

 //Checks if any warning
 If len(ls_Error) > 0 Then
  MessageBox("Warning", "With warning information:~r~n" + ls_Error)
 Else
  MessageBox("Succeed", "Return Value: " + String(ll_RowCount) )
 End If
End If

This example imports data (and state) from a standard-format JSON string into the primary buffer of the DataWindow (see an example of a standard-format JSON string):

long ll_RowCount
string ls_StandardJson

//Standard JSON
ls_StandardJson = …
ll_RowCount = dw_1.ImportJson(ls_StandardJson, Primary!)

This example imports data from a simple-format JSON string in rows 2 through the end into the primary buffer of the DataWindow:

long ll_RowCount
string ls_SimpleJson

//Simple JSON
ls_SimpleJson = '[{"department_id":100,"department_name":"Sales"}, &
 {"department_id":200,"department_name":"Finance"},{"department_id":300,"department_name":"Marketing"}]'

ll_RowCount = dw_1.ImportJson(ls_SimpleJson, Primary!, 2)

This example imports data from a simple-format JSON string in rows 1 through 3 into the filter buffer of the DataWindow:

long ll_RowCount
string ls_SimpleJson

//Simple JSON
ls_SimpleJson = '[{"emp_id":1,"emp_fname":"Fran","emp_lname":"Whitney"}, &
          {"emp_id":2,"emp_fname":"Matthew","emp_lname":"Cobb"}, &
          {"emp_id":3,"emp_fname":"Philip","emp_lname":"Chin"}, &
          {"emp_id":4,"emp_fname":"Julie","emp_lname":"Jordan"}, &
          {"emp_id":5,"emp_fname":"Robert","emp_lname":"Breault"}]'       
ll_RowCount = dw_1.ImportJson(ls_SimpleJson, Filter!, 1, 3)

This example imports data from a simple-format JSON string in rows 1 through 3 and in columns 2 through the end into the primary buffer of the DataWindow:

long ll_RowCount
string ls_SimpleJson

//Simple JSON
ls_SimpleJson = '[{"emp_id":1,"emp_fname":"Fran","emp_lname":"Whitney"}, &
          {"emp_id":2,"emp_fname":"Matthew","emp_lname":"Cobb"}, &
          {"emp_id":3,"emp_fname":"Philip","emp_lname":"Chin"}, &
          {"emp_id":4,"emp_fname":"Julie","emp_lname":"Jordan"}, &
          {"emp_id":5,"emp_fname":"Robert","emp_lname":"Breault"}]' 
ll_RowCount = dw_1.ImportJson(ls_SimpleJson, Primary!, 1, 3, 2)

This example imports data (and state) from a standard-format JSON string in rows 1 through 10 and in columns 1 through 5 into the primary buffer of the DataWindow (see an example of a standard-format JSON string):

long ll_RowCount
string ls_StandardJson

//Standard JSON
ls_StandardJson = … 
ll_RowCount = dw_1.ImportJson(ls_StandardJson, Primary!, 1, 10, 1, 5)

This example imports data from a simple-format JSON string in rows 1 through 3 and in columns 2 through 5 into the primary buffer of the DataWindow beginning in column 3:

long ll_RowCount
string ls_SimpleJson

//Simple JSON
ls_SimpleJson = '[{"emp_id":1,"emp_fname":"Fran","emp_lname":"Whitney", &
       "street":"9 East Washington Street","city":"Cornwall"}, &
     {"emp_id":2,"emp_fname":"Matthew","emp_lname":"Cobb", &
       "street":"7 Pleasant Street","city":"Grimsby"}, &
     {"emp_id":3,"emp_fname":"Philip","emp_lname":"Chin", &
       "street":"539 Pond Street","city":"Oakville"}, &
     {"emp_id":4,"emp_fname":"Julie","emp_lname":"Jordan", &
       "street":"1244 Great Plain Avenue","city":"Woodbridge"}, &
     {"emp_id":5,"emp_fname":"Robert","emp_lname":"Breault", &
       "street":"358 Cherry Street","city":"Milton"}]'
ll_RowCount = dw_1.ImportJson(ls_SimpleJson, Primary!, 1, 3, 2, 5, 3)

This example imports data (and state) from a standard-format JSON string into the primary buffer of the DataWindow (see an example of a standard-format JSON string):

long ll_RowCount
string ls_StandardJson, ls_Error

//Standard JSON
ls_StandardJson = …
ll_RowCount = dw_1.ImportJson(ls_StandardJson, ls_Error, Primary!)

//Checks if any error
IF isnull(ll_RowCount) Then
 Messagebox("Error", "The method returns null")
ElseIf ll_RowCount < 0 Then
 If len(ls_Error) > 0 Then
  Messagebox("Failed","Return Value: " + String(ll_RowCount) &
      + "~r~nWith error information:~r~n" + ls_Error)
 Else
  Messagebox("Failed","Return Value: "+String(ll_RowCount))
 End If
Else
 //Checks if any warning
 If len(ls_Error) > 0 Then
  MessageBox("Warning", "With warning information:~r~n" + ls_Error)
 Else
  MessageBox("Succeed", "Return Value: " + String(ll_RowCount) )
 End If
End If

This example imports data from a simple-format JSON string in rows 2 through the end into the delete buffer of the DataWindow:

long ll_RowCount
string ls_SimpleJson, ls_Error

//Simple JSON
ls_SimpleJson = '[{"emp_id":1,"emp_fname":"Fran","emp_lname":"Whitney"}, &
          {"emp_id":2,"emp_fname":"Matthew","emp_lname":"Cobb"}, &
          {"emp_id":3,"emp_fname":"Philip","emp_lname":"Chin"}, &
          {"emp_id":4,"emp_fname":"Julie","emp_lname":"Jordan"}, &
          {"emp_id":5,"emp_fname":"Robert","emp_lname":"Breault"}]'  
ll_RowCount = dw_1.ImportJson(ls_SimpleJson, ls_Error, Delete!, 2)

//Checks if any error
IF isnull(ll_RowCount) Then
 Messagebox("Error", "The method returns null")
ElseIf ll_RowCount < 0 Then
 If len(ls_Error) > 0 Then
  Messagebox("Failed","Return Value: " + String(ll_RowCount) &
      + "~r~nWith error information:~r~n" + ls_Error)
 Else
  Messagebox("Failed","Return Value: "+String(ll_RowCount))
 End If
Else
 //Checks if any warning
 If len(ls_Error) > 0 Then
  MessageBox("Warning", "With warning information:~r~n" + ls_Error)
 Else
  MessageBox("Succeed", "Return Value: " + String(ll_RowCount) )
 End If
End If

This example imports data (and state) from a standard-format JSON string in rows 1 through 10 into the primary buffer of the DataWindow (see an example of a standard-format JSON string):

long ll_RowCount
string ls_StandardJson, ls_Error

//Standard JSON
ls_StandardJson = … 
ll_RowCount = dw_1.ImportJson(ls_StandardJson, ls_Error, Primary!, 1, 10)

//Checks if any error
IF isnull(ll_RowCount) Then
 Messagebox("Error", "The method returns null")
ElseIf ll_RowCount < 0 Then
 If len(ls_Error) > 0 Then
  Messagebox("Failed","Return Value: " + String(ll_RowCount) &
      + "~r~nWith error information:~r~n" + ls_Error)
 Else
  Messagebox("Failed","Return Value: "+String(ll_RowCount))
 End If
Else
 //Checks if any warning
 If len(ls_Error) > 0 Then
  MessageBox("Warning", "With warning information:~r~n" + ls_Error)
 Else
  MessageBox("Succeed", "Return Value: " + String(ll_RowCount) )
 End If
End If

This example imports data (and state) from the standard-format JSON string in rows 1 through 10 and in columns 2 through the end into the primary buffer of the DataWindow (see an example of a standard-format JSON string):

long ll_RowCount
string ls_StandardJson, ls_Error

//Standard JSON
ls_StandardJson = …
ll_RowCount = dw_1.ImportJson(ls_StandardJson, ls_Error, Primary!, 1, 10, 2)

//Checks if any error
IF isnull(ll_RowCount) Then
 Messagebox("Error", "The method returns null")
ElseIf ll_RowCount < 0 Then
 If len(ls_Error) > 0 Then
  Messagebox("Failed","Return Value: " + String(ll_RowCount) &
      + "~r~nWith error information:~r~n" + ls_Error)
 Else
  Messagebox("Failed","Return Value: "+String(ll_RowCount))
 End If
Else
 //Checks if any warning
 If len(ls_Error) > 0 Then
  MessageBox("Warning", "With warning information:~r~n" + ls_Error)
 Else
  MessageBox("Succeed", "Return Value: " + String(ll_RowCount) )
 End If
End If

This example imports data (and state) from a standard-format JSON string in rows 1 through 10 and in columns 2 through 5 into the primary buffer of the DataWindow (see an example of a standard-format JSON string):

long ll_RowCount
string ls_StandardJson, ls_Error

//Standard JSON
ls_StandardJson = … 
ll_RowCount = dw_1.ImportJson(ls_StandardJson, ls_Error, Primary!, 1, 10, 2, 5)

//Checks if any error
IF isnull(ll_RowCount) Then
 Messagebox("Error", "The method returns null")
ElseIf ll_RowCount < 0 Then
 If len(ls_Error) > 0 Then
  Messagebox("Failed","Return Value: " + String(ll_RowCount) &
      + "~r~nWith error information:~r~n" + ls_Error)
 Else
  Messagebox("Failed","Return Value: "+String(ll_RowCount))
 End If
Else
 //Checks if any warning
 If len(ls_Error) > 0 Then
  MessageBox("Warning", "With warning information:~r~n" + ls_Error)
 Else
  MessageBox("Succeed", "Return Value: " + String(ll_RowCount) )
 End If
End If

This example imports data (and state) from a standard-format JSON string in rows 1 through 10 and in columns 2 through 5 into the primary buffer of the DataWindow beginning in column 2 (see an example of a standard-format JSON string):

long ll_RowCount
string ls_StandardJson, ls_Error

//Standard JSON
ls_StandardJson = … 
ll_RowCount = dw_1.ImportJson(ls_StandardJson, ls_Error, Primary!, 1, 10, 2, 5, 2)

//Checks if any error
IF isnull(ll_RowCount) Then
 Messagebox("Error", "The method returns null")
ElseIf ll_RowCount < 0 Then
 If len(ls_Error) > 0 Then
  Messagebox("Failed","Return Value: " + String(ll_RowCount) &
      + "~r~nWith error information:~r~n" + ls_Error)
 Else
  Messagebox("Failed","Return Value: "+String(ll_RowCount))
 End If
Else
 //Checks if any warning
 If len(ls_Error) > 0 Then
  MessageBox("Warning", "With warning information:~r~n" + ls_Error)
 Else
  MessageBox("Succeed", "Return Value: " + String(ll_RowCount) )
 End If
End If

See also

ImportJsonByKey

ExportJson

JSON formats (required by ImportJson & ImportJsonByKey functions)

Simple JSON

A simple-format JSON contains an array, and the array item is an object representing a row of data.

[ SIMPLE-ROW1, SIMPLE-ROW2, SIMPLE-ROW3, SIMPLE-ROW4, SIMPLE-ROW5... ]

The SIMPLE-ROW array item is an object which can contain elements of the following 4 data types: integer, string, boolean, and null.

{ "column1":1, "column2":"name", "column3":true, "column4":null... }

Note that a simple-format JSON must have no more than 2 levels; the top-level must be arrays and the second-level must be objects.

Here is an example of a simple-format JSON string:

[{"emp_id":1,"emp_fname":"Fran","emp_lname":"Whitney", &
     "street":"9 East Washington Street","city":"Cornwall"}, &
 {"emp_id":2,"emp_fname":"Matthew","emp_lname":"Cobb", &
     "street":"7 Pleasant Street","city":"Grimsby"}, &
 {"emp_id":3,"emp_fname":"Philip","emp_lname":"Chin", &
     "street":"539 Pond Street","city":"Oakville"}, &
 {"emp_id":4,"emp_fname":"Julie","emp_lname":"Jordan", &
     "street":"1244 Great Plain Avenue","city":"Woodbridge"}, &
 {"emp_id":5,"emp_fname":"Robert","emp_lname":"Breault", &
     "street":"358 Cherry Street","city":"Milton"}, &
 {"emp_id":6,"emp_fname":"Melissa","emp_lname":"Espinoza", &
     "street":"1121 Apple Tree Way","city":"Iroquois Falls"}, &
 {"emp_id":7,"emp_fname":"Jeannette","emp_lname":"Bertrand", &
     "street":"2090A Concord Street","city":"Waterloo"}, &
 {"emp_id":8,"emp_fname":"Marc","emp_lname":"Dill", &
     "street":"897 Hancock Street","city":"Milton"}, &
 {"emp_id":9,"emp_fname":"Jane","emp_lname":"Francis", &
     "street":"127 Hawthorne Drive","city":"Scarborough"}, &
 {"emp_id":10,"emp_fname":"Natasha","emp_lname":"Shishov", &
     "street":"151 Milk Street","city":"Grimsby"}, &
 {"emp_id":11,"emp_fname":"Kurt","emp_lname":"Driscoll", &
     "street":"1546 School Street","city":"Grimsby"}, &
 {"emp_id":12,"emp_fname":"Rodrigo","emp_lname":"Guevara", &
     "street":"72 East Main Street","city":"Fort Henry"}]

Standard DataWindow JSON

A standard-format DataWindow JSON is an object that contains elements representing the various aspects of a DataWindow.

{
"identity": "70c86603-983b-4bd9-adbc-259436e43cbd",
"version":1.0,
"platform":"PowerBuilder",
"mapping-method": 0,
"dataobject":{"name":"d_example",
    "meta-columns": [COLUMN-META1, COLUMN-META2…],
    "primary-rows": [DW-STANDARD-ROW1, DW-STANDARD-ROW2…],
    "filter-rows": [DW-STANDARD-ROW1, DW-STANDARD-ROW2…],
    "delete-rows": [DW-STANDARD-ROW1, DW-STANDARD-ROW2…],
    "dwchilds":{"department_id": [SIMPLE-ROW1,SIMPLE-ROW2…],
                "category_id": [SIMPLE-ROW1,SIMPLE-ROW2…]
                     …
                    }
}
}

Elements

Description

identity

A string identifying the format. Should keep unchanged.

version

An integer specifying the format version. Currently it is 1.0.

platform

A string specifying the platform where JSON string is generated. Values are: PowerBuilder, C#.

mapping-method

An integer specifying the method for mapping columns. Values are:

  • 0 -- Use the index of JSON item to map with the DataWindow column.

  • 1 -- Use the index of meta-columns to map with the DataWindow column.

  • 2 -- Use the key of JSON item to map with the DataWindow column.

Note: ImportJson function supports only 0 and 1, and ImportJsonByKey function ignores this value.

dataobject

An object indicating it is a DataWindow.

name

A string specifying the name of the DataWindow object (DataObject).

meta-columns (optional)

An array specifying the information of the DataWindow columns (excluding the computed columns).

For elements about the column meta information, see COLUMN-META below.

primary-rows (optional)

An array specifying the data row in the DataWindow primary buffer.

For elements about the DataWindow row, see DW-STANDARD-ROW below.

filter-rows (optional)

An array specifying the data row in the DataWindow filter buffer.

For elements about the DataWindow row, see DW-STANDARD-ROW below.

delete-rows (optional)

An array specifying the data row in the DataWindow delete buffer.

For elements about the DataWindow row, see DW-STANDARD-ROW below.

dwchilds (optional)

An object specifying the data in the DataWindowChild. The column name of the DataWindowChild is the key of dwchilds. The data row is SIMPLE-ROW. see SIMPLE-ROW below for more information.


COLUMN-META

COLUMN-META is an object that contains elements representing the various aspects of the DataWindow column (but not the computed column).

{
"name": "department_id",
"index": 1,
"datatype": "long", 
"nullable": 0
}

name -- (required) a string specifying the name of the column.

index -- (required) an integer specifying the sequence order of the column. This value will be used to map with the DataWindow column when the mapping-method value is set to 1.

datatype -- (required) a string specifying the type of the column. This value is not used by import.

nullable -- (required) an integer specifying whether to allow a null value. 0 - a null value is not allowed, 1 - a null value is allowed.

DW-STANDARD-ROW

DW-STANDARD-ROW is an object that contains elements representing the detailed information of the DataWindow row.

{
 "row-status": 0,
 "columns":{"column1": [CURRENT-VALUE, COLUMN-STATUS, ORIGINAL-VALUE],
           "column2": [CURRENT-VALUE, COLUMN-STATUS, ORIGINAL-VALUE],
            ...
          }
}

row-status -- (required) an integer specifying the status of the DataWindow row. 0 - NotModified!, 1 - DataModified!, 2 - New!, 3 - NewModified!.

columns -- (required) an object specifying the DataWindow column information including the current value, the column status, and the original value.

  • CURRENT-VALUE: (required) The current value of the column, in the following data type: integer, string, boolean, or null.

  • COLUMN-STATUS: (optional) An integer specifying the column status. 0 - (default) NotModified!, 1 - DataModified!.

  • ORIGINAL-VALUE: (optional) The original value of the column, in the following data type: integer, string, boolean, or null. The default type is null.

SIMPLE-ROW

SIMPLE-ROW is an object that contains elements representing the simple information of the DataWindow row. The data must be in the following data type: integer, string, boolean, or null.

{ "column1":1, "column2":"name", "column3":true, "column4":null... }

Example

Here is an example of a standard-format JSON string:

{
  "identity": "70c86603-983b-4bd9-adbc-259436e43cbd",
  "version": 1,
  "platform": "PowerBuilder",
  "mapping-method": 0,
  "dataobject": {
    "name": "d_employee",
    "meta-columns": [
      {
        "name": "emp_id",
        "index": 0,
        "datatype": "long",
        "nullable": 1
      },
      {
        "name": "manager_id",
        "index": 1,
        "datatype": "long",
        "nullable": 1
      },
      {
        "name": "emp_fname",
        "index": 2,
        "datatype": "string",
        "nullable": 1
      },
      {
        "name": "emp_lname",
        "index": 3,
        "datatype": "string",
        "nullable": 1
      },
      {
        "name": "dept_id",
        "index": 4,
        "datatype": "long",
        "nullable": 1
      },
      {
        "name": "street",
        "index": 5,
        "datatype": "string",
        "nullable": 1
      },
      {
        "name": "city",
        "index": 6,
        "datatype": "string",
        "nullable": 1
      },
      {
        "name": "state",
        "index": 7,
        "datatype": "string",
        "nullable": 1
      },
      {
        "name": "zip_code",
        "index": 8,
        "datatype": "string",
        "nullable": 1
      },
      {
        "name": "phone",
        "index": 9,
        "datatype": "string",
        "nullable": 1
      },
      {
        "name": "status",
        "index": 10,
        "datatype": "string",
        "nullable": 0
      },
      {
        "name": "ss_number",
        "index": 11,
        "datatype": "string",
        "nullable": 1
      },
      {
        "name": "salary",
        "index": 12,
        "datatype": "decimal",
        "nullable": 1
      },
      {
        "name": "start_date",
        "index": 13,
        "datatype": "date",
        "nullable": 1
      },
      {
        "name": "termination_date",
        "index": 14,
        "datatype": "date",
        "nullable": 1
      },
      {
        "name": "birth_date",
        "index": 15,
        "datatype": "date",
        "nullable": 1
      },
      {
        "name": "bene_health_ins",
        "index": 16,
        "datatype": "string",
        "nullable": 0
      },
      {
        "name": "bene_life_ins",
        "index": 17,
        "datatype": "string",
        "nullable": 0
      },
      {
        "name": "bene_day_care",
        "index": 18,
        "datatype": "string",
        "nullable": 0
      }
    ],
    "primary-rows": [
      {
        "row-status": 1,
        "columns": {
          "emp_id": [ 102 ],
          "manager_id": [ 501 ],
          "emp_fname": [ "Fran" ],
          "emp_lname": [ "Whitney" ],
          "dept_id": [ 400, 1, 100 ],
          "street": [ "49 East Washington Street" ],
          "city": [ "Needham" ],
          "state": [ "MA" ],
          "zip_code": [ "02192    " ],
          "phone": [ "6175554321", 1, "6175553985" ],
          "status": [ "A" ],
          "ss_number": [ "017349033" ],
          "salary": [ 50000, 1, 45700 ],
          "start_date": [ "1994-02-26" ],
          "termination_date": [ null ],
          "birth_date": [ "1966-06-05" ],
          "bene_health_ins": [ "Y" ],
          "bene_life_ins": [ "Y" ],
          "bene_day_care": [ "N" ]
        }
      },
      {
        "row-status": 0,
        "columns": {
          "emp_id": [ 129 ],
          "manager_id": [ 902 ],
          "emp_fname": [ "Philip" ],
          "emp_lname": [ "Chin" ],
          "dept_id": [ 200 ],
          "street": [ "59 Pond Street" ],
          "city": [ "Atlanta" ],
          "state": [ "GA" ],
          "zip_code": [ "30339    " ],
          "phone": [ "4045552341" ],
          "status": [ "A" ],
          "ss_number": [ "024608923" ],
          "salary": [ 38500 ],
          "start_date": [ "2005-08-04" ],
          "termination_date": [ null ],
          "birth_date": [ "1974-10-30" ],
          "bene_health_ins": [ "Y" ],
          "bene_life_ins": [ "Y" ],
          "bene_day_care": [ "N" ]
        }
      },
      {
        "row-status": 3,
        "columns": {
          "emp_id": [ 104, 1, null ],
          "manager_id": [ 902, 1, null ],
          "emp_fname": [ "Chris", 1, null ],
          "emp_lname": [ "Young", 1, null ],
          "dept_id": [ 200, 1, null ],
          "street": [ "57 Carver Street", 1, null ],
          "city": [ "Concord", 1, null ],
          "state": [ "MA", 1, null ],
          "zip_code": [ "12345    ", 1, null ],
          "phone": [ "6185551234", 1, null ],
          "status": [ "A", 1, null ],
          "ss_number": [ "010123456", 1, null ],
          "salary": [ 63000, 1, null ],
          "start_date": [ "2018-05-06", 1, null ],
          "termination_date": [ null ],
          "birth_date": [ "1984-10-12", 1, null ],
          "bene_health_ins": [ "Y", 1, null ],
          "bene_life_ins": [ "Y", 1, null ],
          "bene_day_care": [ null ]
        }
      }
    ],
    "filter-rows": [
      {
        "row-status": 0,
        "columns": {
          "emp_id": [ 148 ],
          "manager_id": [ 1293 ],
          "emp_fname": [ "Julie" ],
          "emp_lname": [ "Jordan" ],
          "dept_id": [ 300 ],
          "street": [ "144 Great Plain Avenue" ],
          "city": [ "Winchester" ],
          "state": [ "MA" ],
          "zip_code": [ "01890    " ],
          "phone": [ "6175557835" ],
          "status": [ "A" ],
          "ss_number": [ "501704733" ],
          "salary": [ 51432 ],
          "start_date": [ "2004-10-04" ],
          "termination_date": [ null ],
          "birth_date": [ "1959-12-13" ],
          "bene_health_ins": [ "Y" ],
          "bene_life_ins": [ "Y" ],
          "bene_day_care": [ "N" ]
        }
      }
    ],
    "delete-rows": [
      {
        "row-status": 0,
        "columns": {
          "emp_id": [ 105 ],
          "manager_id": [ 501 ],
          "emp_fname": [ "Matthew" ],
          "emp_lname": [ "Cobb" ],
          "dept_id": [ 100 ],
          "street": [ "77 Pleasant Street" ],
          "city": [ "Waltham" ],
          "state": [ "MA" ],
          "zip_code": [ "02154    " ],
          "phone": [ "6175553840" ],
          "status": [ "A" ],
          "ss_number": [ "052345739" ],
          "salary": [ 62000 ],
          "start_date": [ "1994-07-02" ],
          "termination_date": [ null ],
          "birth_date": [ "1968-12-04" ],
          "bene_health_ins": [ "Y" ],
          "bene_life_ins": [ "Y" ],
          "bene_day_care": [ "N" ]
        }
      }
    ],
    "dwchilds": {
      "dept_id": [
        {
          "dept_id": 100,
          "dept_name": "R & D"
        },
        {
          "dept_id": 200,
          "dept_name": "Sales"
        },
        {
          "dept_id": 300,
          "dept_name": "Finance"
        },
        {
          "dept_id": 400,
          "dept_name": "Marketing"
        },
        {
          "dept_id": 500,
          "dept_name": "Shipping"
        }
      ]
    }
  }
}