Get a string vector from a json_value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
character(kind=CK,len=*), | intent(out), | dimension(:), allocatable | :: | vec |
subroutine json_get_string_vec(json, me, vec)
implicit none
class(json_core),intent(inout) :: json
type(json_value),pointer,intent(in) :: me
character(kind=CK,len=*),dimension(:),allocatable,intent(out) :: vec
logical(LK) :: initialized
! check for 0-length arrays first:
select case (me%var_type)
case (json_array)
if (json%count(me)==0) then
allocate(vec(0))
return
end if
end select
initialized = .false.
!the callback function is called for each element of the array:
call json%get(me, array_callback=get_chars_from_array)
contains
subroutine get_chars_from_array(json, element, i, count)
!! callback function for chars
implicit none
class(json_core),intent(inout) :: json
type(json_value),pointer,intent(in) :: element
integer(IK),intent(in) :: i !! index
integer(IK),intent(in) :: count !! size of array
character(kind=CK,len=:),allocatable :: cval
!size the output array:
if (.not. initialized) then
allocate(vec(count))
initialized = .true.
end if
!populate the elements:
call json%get(element, value=cval)
if (allocated(cval)) then
vec(i) = cval
deallocate(cval)
else
vec(i) = CK_''
end if
end subroutine get_chars_from_array
end subroutine json_get_string_vec