Syntax 1: GetItemArray (ParentItemHandle, Key)
Syntax 2: GetItemArray (ItemPath)
Description
Gets the value of the item whose type is array.
Applies to
Syntax
objectname.GetItemArray ( ParentItemHandle, Key )
|
Argument |
Description |
|---|---|
|
objectname |
The name of the JSONParser object whose array item you want to obtain. |
|
ParentItemHandle |
A long whose value is the handle of the parent item of JsonObjectItem type. |
|
Key |
A string whose value is the key of the child item of JsonArrayItem type. |
Return value
Long.
Returns the value of the child item of an array if it succeeds and -1 if an error occurs. If any argument's value is null, the method returns null. If the key is not found and if the ReturnsNullWhenError property is true, the method returns null (if the ReturnsNullWhenError property is false, throw the exception).
Usage
If the item value is null, this function will throw an error, therefore, it is recommended that before executing this function, call GetItemType to check if the item value is null. See example 2.
Example 1
The following code handles a regular JSON string.
JsonParser lnv_JsonParser
String ls_Json, ls_name
Long ll_number_item, ll_number, ll_object_item
Long ll_RootObject, 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)
ll_RootObject = lnv_JsonParser.GetRootItem()
ll_department_array = lnv_JsonParser.GetItemArray(ll_RootObject, "department_array")
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")
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
Description
Gets the value of the item whose type is array.
Applies to
Syntax
objectname.GetItemArray ( ItemPath )
|
Argument |
Description |
|---|---|
|
objectname |
The name of the JSONParser object whose array item you want to obtain. |
|
ItemPath |
A string whose value is the path of the item of JsonArrayItem type. If there is a multi-dimensional array, use the number to indicate the order of the array elements. If a key name contains "/", use the escape character "~~/" to replace "/". |
Return value
Long.
Returns the value of the child item of an array if it succeeds and -1 if an error occurs. If any argument's value is null, the method returns null. If the path is not found and if the ReturnsNullWhenError property is true, the method returns null (if the ReturnsNullWhenError property is false, throw the exception).
Usage
If the item value is null, this function will throw an error, therefore, it is recommended that before executing this function, call GetItemType to check if the item value is null. See example 2.
Example
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")
See also


