Returns a child in the object or array given the name string.
The name search can be case-sensitive or not, and can have significant trailing whitespace or not, depending on the settings in the json_core class.
Note
The name
input is not a path, and is not parsed like it is in json_get_by_path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | p | ||
character(kind=CK, len=*), | intent(in) | :: | name |
the name of a child of |
||
type(json_value), | pointer | :: | child |
pointer to the child |
||
logical(kind=LK), | intent(out), | optional | :: | found |
true if the value was found (if not present, an exception will be thrown if it was not found. If present and not found, no exception will be thrown). |
subroutine json_value_get_child_by_name(json, p, name, child, found) implicit none class(json_core),intent(inout) :: json type(json_value),pointer,intent(in) :: p character(kind=CK,len=*),intent(in) :: name !! the name of a child of `p` type(json_value),pointer :: child !! pointer to the child logical(LK),intent(out),optional :: found !! true if the value was found !! (if not present, an exception !! will be thrown if it was not !! found. If present and not !! found, no exception will be !! thrown). integer(IK) :: i,n_children logical :: error nullify(child) if (.not. json%exception_thrown) then if (associated(p)) then error = .true. ! will be false if it is found if (p%var_type==json_object) then n_children = json%count(p) child => p%children !start with first one do i=1, n_children if (.not. associated(child)) then call json%throw_exception(& 'Error in json_value_get_child_by_name: '//& 'Malformed JSON linked list',found) exit end if if (allocated(child%name)) then !name string matching routine: if (json%name_equal(child,name)) then error = .false. exit end if end if child => child%next end do end if if (error) then !did not find anything: call json%throw_exception(& 'Error in json_value_get_child_by_name: '//& 'child variable '//trim(name)//' was not found.',found) nullify(child) end if else call json%throw_exception(& 'Error in json_value_get_child_by_name: '//& 'pointer is not associated.',found) end if ! found output: if (json%exception_thrown) then if (present(found)) then call json%clear_exceptions() found = .false. end if else if (present(found)) found = .true. end if else if (present(found)) found = .false. end if end subroutine json_value_get_child_by_name