Description
Loads a JSON string to the JSONParser or JSONPackage objects.
Applies to
Required JSON format
-
For JSONParser object: The string that can be loaded by the JSONParser object must be JSON-formatted.
-
For JSONPackage object: The string that can be loaded by the JSONPackage object must be an object which contains a set of key/value pairs where key is the name of a JSONObjectItem-type object (corresponding to the data being added into the package, such as "d_department" and "d_employee_syntax") and the value for the key can be a string, object, or array in the following formats: plain JSON, or DataWindow JSON.
Here is the structure of this JSON format:
{ "KEY1":VALUE1, "KEY2":VALUE2, "KEY3":VALUE3… }Here is an example of this JSON format:
{ "d_department": {"department_id":1, "name":"developer"}, "d_employee": [{"empoyee_id":1, "name":"my name1"}, {"empoyee_id":2, "name":"my name2"}], "d_employee_syntax": "release 17;\r\n datawindow(units=0 timer_interval=0 color=1073741824..." }If the root of the JSON string is an array (not an object), as shown below, it is NOT supported by JSONPackage (but supported by JSONParser):
[{"id":1, "name":"evan1", "birthday":2340323884}]You can change the JSON string like below, so it can be supported by JSONPackage:
{"id":1, "name":"evan1", "birthday":2340323884}or
{"data":[{"id":1, "name":"evan1", "birthday":2340323884}]}
Note
To make sure your JSON file or JSON string is in the standard JSON format, you can use any third-party tool (such as the online JSON tool) to validate the JSON format.
Syntax
objectname.LoadString ( JsonData )
|
Argument |
Description |
|---|---|
|
objectname |
The name of the JSONParser or JSONPackage object to which the JSON string will be loaded. |
|
JsonData |
(For JSONParser object) A JSON-formatted string. (For JSONPackage object) The JSON data of JsonObjectItem type. |
Return value
String.
Returns the empty string ("") if it succeeds and the error message if an error occurs. If any argument's value is null, the method returns null.
Usage
If a string is already loaded by this function, calling this function again will clean up the original string and then load the new string.
After the JSON string is loaded, you can get the data through the following methods:
-
gets an array according to its item path. See below Example 3.
-
gets the JSON string of an array according to its item handle. See below Example 4.
-
gets the item handle from a JSONParser object according to the item path from a two-dimensional array. See below Example 5.
-
gets the total number of child items according to the parent item handle and then gets the value of every array item in a loop. See below Example 6.
-
determines the type of number values according to the item handle. See below Example 7.
-
handles an irregular JSON string which contains a null value. See below Example 8.
Examples
Example 1: This example loads a JSON string into the JSONParser object.
String ls_Error
JsonParser lnv_JsonParser
lnv_JsonParser = Create JsonParser
String ls_Json = '{"id":1, "name":"evan1", "birthday":2340323884}'
ls_Error = lnv_JsonParser.LoadString(ls_Json)
if Len(ls_Error) > 0 then
MessageBox("Error", ls_Error)
end if
Example 2: This example gets the data from the server and then loads the "d_employee" data to the DataWindow.
int li_rc
string ls_JsonPackage, ls_Error, ls_EmployeeJson
HttpClient lnv_HttpClient
JsonPackage lnv_package
lnv_HttpClient = create HttpClient
lnv_package = create JsonPackage
// Request the JSON data package from server
li_rc = lnv_HttpClient.SendRequest("GET", "https://demo.appeon.com/PB/webapi_client/getjsonpackage/employee/102")
// Get the data
if li_rc = 1 and lnv_HttpClient.GetResponseStatusCode() = 200 then
lnv_HttpClient.GetResponseBody(ls_JsonPackage)
// Extract the JSON data package
ls_Error = lnv_package.LoadString(ls_JsonPackage)
if Len(ls_Error) = 0 then
ls_EmployeeJson = lnv_package.GetValue("d_employee")
dw_1.ImportJson(ls_EmployeeJson)
else
Messagebox("Error", ls_Error)
end if
end if
Example 3: The following code gets an array according to its item path.
JsonParser lnv_JsonParser
String ls_Json, ls_name, ls_Path
Long ll_number_item, ll_number, ll_object_item
Long ll_department_array
lnv_JsonParser = Create JsonParser
ls_Json = '{"id":1001, "name":"evan", "department_array":[999999, {"name":"Website"}, {"name":"PowerBuilder"}, {"name":"IT"}] }'
lnv_JsonParser.LoadString(ls_Json)
ls_Path = "/department_array"
ll_department_array = lnv_JsonParser.GetItemArray(ls_Path)
ll_number_item = lnv_JsonParser.GetChildItem(ll_department_array, 1)
ll_number = lnv_JsonParser.GetItemNumber(ll_number_item)
ll_object_item = lnv_JsonParser.GetChildItem(ll_department_array, 2)
ls_name = lnv_JsonParser.GetItemString(ll_object_item, "name")
Example 4: The following code gets the JSON string of an array according to its item handle.
JsonParser lnv_JsonParser
String ls_Json, ls_Array
Long ll_RootObject, ll_ChildArray, ll_Handle
lnv_JsonParser = Create JsonParser
ls_Json = '{"id":1001, "name":"svan", "active":true,"array":[12,34,[56,78]]}'
lnv_JsonParser.LoadString(ls_Json)
ll_RootObject = lnv_JsonParser.GetRootItem()
ll_ChildArray = lnv_JsonParser.GetItemArray(ll_RootObject,"array")
ll_Handle = lnv_JsonParser.GetChildItem(ll_ChildArray, 3)
ls_Array = lnv_JsonParser.GetItemArrayJSONString(ll_Handle)
Example 5: This example gets the item handle from a JSONParser object according to the item path from a two-dimensional array. The number indicates the order of the array.
JsonParser lnv_JsonParser
String ls_Json, ls_Name, ls_Path
DateTime ldt_DateTime
Long ll_item
lnv_JsonParser = Create JsonParser
ls_Json = '[{"id":1001, "name":"evan", "data_object":{"datetime":7234930293, "date": "2017-09-21", "time": "12:00:00","age":[66,22,33]}},' + &
'{"id":1002, "name":"evan2", "data_object":{"datetime":1734930293, "date": "2017-09-11", "time": "11:00:00","age":[55,23,33]}}]'
lnv_JsonParser.LoadString(ls_Json)
ls_Path = "/1/name"
ll_item = lnv_JsonParser.GetItemByPath(ls_Path)
ls_Name = lnv_JsonParser.GetItemString(ll_item)
ls_Path = "/2/data_object/datetime"
ll_item = lnv_JsonParser.GetItemByPath(ls_Path)
ldt_DateTime = lnv_JsonParser.GetItemDateTime(ll_item)
Example 6: This example gets the total number of child items according to the parent item handle and then gets the value of every array item in a loop.
String ls_Json, ls_Name
Long ll_ChildCount, ll_Index, ll_Id, ll_ArrayItem, ll_ObjectItem
Datetime ldt_Birthday
JsonParser lnv_JsonParser
lnv_JsonParser = Create JsonParser
ls_Json = '[{"id":1, "name":"evan1", "birthday":2340323884}, {"id":2, "name":"evan2", "birthday":5340324801}]'
// Loads a JSON string
lnv_JsonParser.LoadString(ls_Json)
Long ll_ArrayItem = lnv_JsonParser.GetRootItem() // Root item is JsonArrayItem!
ll_ChildCount = lnv_JsonParser.GetChildCount(ll_ArrayItem)
// Gets the array item in a loop
for ll_Index = 1 to ll_ChildCount
// Gets the array item
Long ll_ObjectItem = lnv_JsonParser.GetChildItem(ll_ArrayItem, ll_Index)
// Array item is JsonObjectItem!
if lnv_JsonParser.GetItemType(ll_ObjectItem) = JsonObjectItem! then
ll_Id = lnv_JsonParser.GetItemNumber(ll_ObjectItem, "id")
ls_Name = lnv_JsonParser.GetItemString(ll_ObjectItem, "name")
ldt_Birthday = lnv_JsonParser.GetItemDateTime(ll_ObjectItem, "birthday")
end if
...
next
Example 7: This example determines the type of number values according to the item handle.
Long ll_ItemCount, ll_I, ll_RootItem, ll_Child
String ls_Json, ls_Return, ls_Key, ls_Value
Dec ldc_Value
JsonItemType ljs_type, ljs_Root
JsonNumberType ljsn_type
JsonParser ljs_par
ljs_par = Create JsonParser
ls_Json = '{"value1":123.45,"value2":Infinity,"value3":-Infinity,"value4":NaN,"value5":null}'
ls_Return = ljs_par.LoadString(ls_Json)
If Len(ls_Return) > 0 Then Return
ll_RootItem = ljs_par.GetRootItem()
ll_ItemCount = ljs_Par.GetChildCount(ll_RootItem)
ljs_Root = ljs_par.GetItemType(ll_RootItem)
For ll_I = 1 To ll_ItemCount
ll_child = ljs_par.getchilditem( ll_RootItem, ll_i)
ls_Key = ljs_par.GetChildKey(ll_RootItem, ll_i)
ljs_type = ljs_par.GetItemType(ll_child)
Choose Case ljs_type
Case Jsonnumberitem!
ldc_Value = ljs_par.GetItemNumber(ll_child)
If IsNull ( ldc_value ) Then
ljsn_type = ljs_par.GetNumberType(ll_child)
Choose Case ljsn_type
Case JsonNaN!
ls_value = "Nan"
Case JsonPositiveInfinity!
ls_value = "Infinity"
Case JsonNegativeInfinity!
ls_value = "-Infinity"
Case JsonNumber!
ls_value = "null"
Case Else
End Choose
Else
ls_value = String(ldc_value)
End If
Case Jsonnullitem!
ls_value = "null"
End Choose
ls_Return += ls_Key + "=" + ls_Value + "~r~n"
Next
If IsValid ( ljs_par ) Then Destroy ( ljs_par )
Example 8: The following code handles an irregular JSON string which contains a null value.
long ll_loop,i
long ll_row
long ll_root,ll_object,ll_item //receiving the handle of JSON item
string ls_json,ls_error
string ls_return
string ls_key
jsonparser lnv_jsonparser
lnv_jsonparser = create jsonparser
ls_json = "[{~"ID~":101,~"FirstName~":~"Li~"},{~"ID~":102,~"FirstName~":null}]" // JSON data contains a null value
//Loads the JSON data
ls_error= lnv_jsonparser.loadstring(ls_json)
if len(trim(ls_error)) > 0 then
messagebox("Failed","load json failed:"+ls_error)
return
end if
//Obtains the handle of root item
ll_root = lnv_jsonparser.getrootitem()
//Obtains the data of each row
for ll_loop = 1 to lnv_jsonparser.getchildcount(ll_root)
//Obtains the handle of each row
ll_object = lnv_jsonparser.getchilditem(ll_root,ll_loop)
//Inserts a row into datawindow
ll_row = dw_1.insertrow(0)
//Parses the item value one by one in a row in a loop
for i = 1 to lnv_jsonparser.getchildcount(ll_object)
//Obtains the handle and key of each item
ll_item = lnv_jsonparser.getchilditem(ll_object,i)
ls_key = lnv_jsonparser.getchildkey(ll_object,i)
//Checks the data type of each item
choose case lnv_jsonparser.getitemtype(ll_item)
case jsonarrayitem!,jsonobjectitem!
messagebox("Error","Not standard datatype") //Item value cannot be inserted to datawindow
case jsonnumberitem!
//Obtains number data
dw_1.setitem(ll_row,i,lnv_jsonparser.getitemnumber(ll_item))
//dw_1.setitem(ll_row,ls_key,lnv_jsonparser.getitemnumber(ll_object,ls_key)) or set data by column name
case jsonstringitem!
//Obtains string data
dw_1.setitem(ll_row,i,lnv_jsonparser.getitemstring(ll_item))
case jsonbooleanitem!
//Obtains boolean data. boolean converted to string and inserted to datawindow
dw_1.setitem(ll_row,i,string(lnv_jsonparser.getitemboolean(ll_item)))
case jsonnullitem!
//null value. Not inserted to datawindow.
end choose
next //Finish parsing one row
next//Start parsing next row
See also


