Parse the JSON string and populate the json_value tree.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p |
output structure |
||
character(kind=CK, len=*), | intent(in) | :: | str |
string with JSON data |
subroutine json_parse_string(json, p, str) implicit none class(json_core),intent(inout) :: json type(json_value),pointer :: p !! output structure character(kind=CK,len=*),intent(in) :: str !! string with JSON data integer(IK),parameter :: iunit = 0 !! indicates that json data will be read from buffer logical(LK) :: has_duplicate !! if checking for duplicate keys character(kind=CK,len=:),allocatable :: path !! path to any duplicate key ! clear any exceptions and initialize: call json%initialize() call json%prepare_parser() ! create the value and associate the pointer call json_value_create(p) ! Note: the name of the root json_value doesn't really matter, ! but we'll allocate something here just in case. p%name = CK_'' ! parse as a value call json%parse_value(unit=iunit, str=str, value=p) call json%parse_end(unit=iunit, str=str) if (json%exception_thrown) then call json%annotate_invalid_json(iunit,str) else if (.not. json%allow_duplicate_keys) then call json%check_for_duplicate_keys(p,has_duplicate,path=path) if (.not. json%exception_thrown) then if (has_duplicate) then call json%throw_exception('Error in json_parse_string: '//& 'Duplicate key found: '//path) end if end if end if end if end subroutine json_parse_string