Convert an existing JSON variable p
to a different variable type.
The existing variable (and its children) is destroyed. It is replaced
in the structure by a new variable of type var_type
(which can be a json_null
, json_object
or json_array
).
Note
This is an internal routine used when creating variables by path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p |
the variable to convert |
||
integer(kind=IK), | intent(in) | :: | var_type |
the variable type to convert |
subroutine convert(json,p,var_type) implicit none class(json_core),intent(inout) :: json type(json_value),pointer :: p !! the variable to convert integer(IK),intent(in) :: var_type !! the variable type to convert `p` to type(json_value),pointer :: tmp !! temporary variable character(kind=CK,len=:),allocatable :: name !! the name of a JSON variable logical :: convert_it !! if `p` needs to be converted convert_it = p%var_type /= var_type if (convert_it) then call json%info(p,name=name) ! get existing name select case (var_type) case(json_object) call json%create_object(tmp,name) case(json_array) call json%create_array(tmp,name) case(json_null) call json%create_null(tmp,name) case default call json%throw_exception('Error in convert: invalid var_type value.') return end select call json%replace(p,tmp,destroy=.true.) p => tmp nullify(tmp) end if end subroutine convert