json_get_by_path_rfc6901 Subroutine

private subroutine json_get_by_path_rfc6901(json, me, path, p, found)

Returns the json_value pointer given the path string, using the “JSON Pointer” path specification defined by RFC 6901.

Note that trailing whitespace significance and case sensitivity are user-specified. To fully conform to the RFC 6901 standard, should probably set (via initialize):

  • case_sensitive_keys = .true. [this is the default setting]
  • trailing_spaces_significant = .true. [this is not the default setting]
  • allow_duplicate_keys = .false. [this is not the default setting]

Example

    type(json_core) :: json
    type(json_value),pointer :: dat,p
    logical :: found
    !...
    call json%initialize(path_mode=2)
    call json%get(dat,'/data/2/version',p,found)

See also

Reference

  • JavaScript Object Notation (JSON) Pointer

    This is considered a normal error.

    (in accordance with the RFC 6901 standard)

     (according to the standard, evaluation of non-unique references
     should fail). Like [[json_get_by_path_default]], this one will just return
     the first instance it encounters. This might be changed in the future.
    
     escaped JSON strings (currently we are assuming they are not escaped).
    

Type Bound

json_core

Arguments

Type IntentOptional Attributes Name
class(json_core), intent(inout) :: json
type(json_value), intent(in), pointer :: me

a JSON linked list

character(kind=CK, len=*), intent(in) :: path

path to the variable (an RFC 6901 “JSON Pointer”)

type(json_value), intent(out), pointer :: p

pointer to the variable specify by path

logical(kind=LK), intent(out), optional :: found

true if it was found


Calls

proc~~json_get_by_path_rfc6901~~CallsGraph proc~json_get_by_path_rfc6901 json_core%json_get_by_path_rfc6901 none~get_child json_core%get_child proc~json_get_by_path_rfc6901->none~get_child none~throw_exception json_core%throw_exception proc~json_get_by_path_rfc6901->none~throw_exception proc~decode_rfc6901 decode_rfc6901 proc~json_get_by_path_rfc6901->proc~decode_rfc6901 proc~json_clear_exceptions json_core%json_clear_exceptions proc~json_get_by_path_rfc6901->proc~json_clear_exceptions proc~string_to_integer string_to_integer proc~json_get_by_path_rfc6901->proc~string_to_integer proc~json_value_get_child json_core%json_value_get_child none~get_child->proc~json_value_get_child proc~json_value_get_child_by_index json_core%json_value_get_child_by_index none~get_child->proc~json_value_get_child_by_index proc~json_value_get_child_by_name json_core%json_value_get_child_by_name none~get_child->proc~json_value_get_child_by_name proc~json_throw_exception json_core%json_throw_exception none~throw_exception->proc~json_throw_exception proc~replace_string replace_string proc~decode_rfc6901->proc~replace_string proc~json_value_get_child->none~throw_exception proc~json_value_get_child_by_index->none~throw_exception proc~json_value_get_child_by_index->proc~json_clear_exceptions proc~json_value_get_child_by_name->none~throw_exception proc~json_value_get_child_by_name->proc~json_clear_exceptions proc~name_equal json_core%name_equal proc~json_value_get_child_by_name->proc~name_equal proc~name_strings_equal json_core%name_strings_equal proc~name_equal->proc~name_strings_equal proc~lowercase_string lowercase_string proc~name_strings_equal->proc~lowercase_string

Called by

proc~~json_get_by_path_rfc6901~~CalledByGraph proc~json_get_by_path_rfc6901 json_core%json_get_by_path_rfc6901 proc~json_get_by_path json_core%json_get_by_path proc~json_get_by_path->proc~json_get_by_path_rfc6901 proc~json_get_by_path_jsonpath_bracket json_core%json_get_by_path_jsonpath_bracket proc~json_get_by_path->proc~json_get_by_path_jsonpath_bracket none~get~2 json_core%get none~get~2->proc~json_get_by_path proc~json_get_alloc_string_vec json_core%json_get_alloc_string_vec none~get~2->proc~json_get_alloc_string_vec proc~json_get_alloc_string_vec_by_path json_core%json_get_alloc_string_vec_by_path none~get~2->proc~json_get_alloc_string_vec_by_path proc~json_get_array_by_path json_core%json_get_array_by_path none~get~2->proc~json_get_array_by_path proc~json_get_integer_by_path json_core%json_get_integer_by_path none~get~2->proc~json_get_integer_by_path proc~json_get_integer_vec json_core%json_get_integer_vec none~get~2->proc~json_get_integer_vec proc~json_get_integer_vec_by_path json_core%json_get_integer_vec_by_path none~get~2->proc~json_get_integer_vec_by_path proc~json_get_logical_by_path json_core%json_get_logical_by_path none~get~2->proc~json_get_logical_by_path proc~json_get_logical_vec json_core%json_get_logical_vec none~get~2->proc~json_get_logical_vec proc~json_get_logical_vec_by_path json_core%json_get_logical_vec_by_path none~get~2->proc~json_get_logical_vec_by_path proc~json_get_real32 json_core%json_get_real32 none~get~2->proc~json_get_real32 proc~json_get_real32_by_path json_core%json_get_real32_by_path none~get~2->proc~json_get_real32_by_path proc~json_get_real32_vec json_core%json_get_real32_vec none~get~2->proc~json_get_real32_vec proc~json_get_real32_vec_by_path json_core%json_get_real32_vec_by_path none~get~2->proc~json_get_real32_vec_by_path proc~json_get_real_by_path json_core%json_get_real_by_path none~get~2->proc~json_get_real_by_path proc~json_get_real_vec json_core%json_get_real_vec none~get~2->proc~json_get_real_vec proc~json_get_real_vec_by_path json_core%json_get_real_vec_by_path none~get~2->proc~json_get_real_vec_by_path proc~json_get_string_by_path json_core%json_get_string_by_path none~get~2->proc~json_get_string_by_path proc~json_get_string_vec json_core%json_get_string_vec none~get~2->proc~json_get_string_vec proc~json_get_string_vec_by_path json_core%json_get_string_vec_by_path none~get~2->proc~json_get_string_vec_by_path proc~json_file_get_alloc_string_vec json_file%json_file_get_alloc_string_vec proc~json_file_get_alloc_string_vec->none~get~2 proc~json_file_get_integer json_file%json_file_get_integer proc~json_file_get_integer->none~get~2 proc~json_file_get_integer_vec json_file%json_file_get_integer_vec proc~json_file_get_integer_vec->none~get~2 proc~json_file_get_logical json_file%json_file_get_logical proc~json_file_get_logical->none~get~2 proc~json_file_get_logical_vec json_file%json_file_get_logical_vec proc~json_file_get_logical_vec->none~get~2 proc~json_file_get_object json_file%json_file_get_object proc~json_file_get_object->none~get~2 proc~json_file_get_real json_file%json_file_get_real proc~json_file_get_real->none~get~2 proc~json_file_get_real32 json_file%json_file_get_real32 proc~json_file_get_real32->none~get~2 proc~json_file_get_real32_vec json_file%json_file_get_real32_vec proc~json_file_get_real32_vec->none~get~2 proc~json_file_get_real_vec json_file%json_file_get_real_vec proc~json_file_get_real_vec->none~get~2 proc~json_file_get_string json_file%json_file_get_string proc~json_file_get_string->none~get~2 proc~json_file_get_string_vec json_file%json_file_get_string_vec proc~json_file_get_string_vec->none~get~2 proc~json_get_alloc_string_vec->none~get~2 none~string_info json_core%string_info proc~json_get_alloc_string_vec->none~string_info proc~json_get_alloc_string_vec_by_path->none~get~2 proc~json_get_array_by_path->none~get~2 proc~json_get_integer_by_path->none~get~2 proc~json_get_integer_vec->none~get~2 proc~json_get_integer_vec_by_path->none~get~2 proc~json_get_logical_by_path->none~get~2 proc~json_get_logical_vec->none~get~2 proc~json_get_logical_vec_by_path->none~get~2 proc~json_get_real32->none~get~2 proc~json_get_real32_by_path->none~get~2 proc~json_get_real32_vec->none~get~2 proc~json_get_real32_vec_by_path->none~get~2 proc~json_get_real_by_path->none~get~2 proc~json_get_real_vec->none~get~2 proc~json_get_real_vec_by_path->none~get~2 proc~json_get_string_by_path->none~get~2 proc~json_get_string_vec->none~get~2 proc~json_get_string_vec_by_path->none~get~2 proc~json_info_by_path json_core%json_info_by_path proc~json_info_by_path->none~get~2 none~info~2 json_core%info proc~json_info_by_path->none~info~2 proc~json_matrix_info_by_path json_core%json_matrix_info_by_path proc~json_matrix_info_by_path->none~get~2 none~matrix_info~2 json_core%matrix_info proc~json_matrix_info_by_path->none~matrix_info~2 proc~json_rename_by_path json_core%json_rename_by_path proc~json_rename_by_path->none~get~2 proc~json_string_info json_core%json_string_info proc~json_string_info->none~get~2 proc~json_string_info->none~info~2 proc~json_update_integer json_core%json_update_integer proc~json_update_integer->none~get~2 proc~json_update_integer->none~info~2 none~add_by_path json_core%add_by_path proc~json_update_integer->none~add_by_path proc~json_update_logical json_core%json_update_logical proc~json_update_logical->none~get~2 proc~json_update_logical->none~info~2 proc~json_update_logical->none~add_by_path proc~json_update_real json_core%json_update_real proc~json_update_real->none~get~2 proc~json_update_real->none~info~2 proc~json_update_real->none~add_by_path proc~json_update_string json_core%json_update_string proc~json_update_string->none~get~2 proc~json_update_string->none~info~2 proc~json_update_string->none~add_by_path proc~json_valid_path json_core%json_valid_path proc~json_valid_path->none~get~2 proc~json_value_remove_if_present json_core%json_value_remove_if_present proc~json_value_remove_if_present->none~get~2 proc~wrap_json_get_alloc_string_vec_by_path wrap_json_get_alloc_string_vec_by_path proc~wrap_json_get_alloc_string_vec_by_path->none~get~2 proc~wrap_json_get_array_by_path wrap_json_get_array_by_path proc~wrap_json_get_array_by_path->none~get~2 proc~wrap_json_get_by_path wrap_json_get_by_path proc~wrap_json_get_by_path->none~get~2 proc~wrap_json_get_integer_by_path wrap_json_get_integer_by_path proc~wrap_json_get_integer_by_path->none~get~2 proc~wrap_json_get_integer_vec_by_path wrap_json_get_integer_vec_by_path proc~wrap_json_get_integer_vec_by_path->none~get~2 proc~wrap_json_get_logical_by_path wrap_json_get_logical_by_path proc~wrap_json_get_logical_by_path->none~get~2 proc~wrap_json_get_logical_vec_by_path wrap_json_get_logical_vec_by_path proc~wrap_json_get_logical_vec_by_path->none~get~2 proc~wrap_json_get_real32_by_path wrap_json_get_real32_by_path proc~wrap_json_get_real32_by_path->none~get~2 proc~wrap_json_get_real32_vec_by_path wrap_json_get_real32_vec_by_path proc~wrap_json_get_real32_vec_by_path->none~get~2 proc~wrap_json_get_real_by_path wrap_json_get_real_by_path proc~wrap_json_get_real_by_path->none~get~2 proc~wrap_json_get_real_vec_by_path wrap_json_get_real_vec_by_path proc~wrap_json_get_real_vec_by_path->none~get~2 proc~wrap_json_get_string_by_path wrap_json_get_string_by_path proc~wrap_json_get_string_by_path->none~get~2 proc~wrap_json_get_string_vec_by_path wrap_json_get_string_vec_by_path proc~wrap_json_get_string_vec_by_path->none~get~2 proc~wrap_json_value_get_child_by_name wrap_json_value_get_child_by_name proc~wrap_json_value_get_child_by_name->none~get~2 none~get json_file%get none~get->proc~json_file_get_alloc_string_vec none~get->proc~json_file_get_integer none~get->proc~json_file_get_integer_vec none~get->proc~json_file_get_logical none~get->proc~json_file_get_logical_vec none~get->proc~json_file_get_object none~get->proc~json_file_get_real none~get->proc~json_file_get_real32 none~get->proc~json_file_get_real32_vec none~get->proc~json_file_get_real_vec none~get->proc~json_file_get_string none~get->proc~json_file_get_string_vec none~info~2->proc~json_info_by_path none~matrix_info~2->proc~json_matrix_info_by_path proc~json_matrix_info json_core%json_matrix_info none~matrix_info~2->proc~json_matrix_info none~remove_if_present json_core%remove_if_present none~remove_if_present->proc~json_value_remove_if_present none~string_info->proc~json_string_info none~update~2 json_core%update none~update~2->proc~json_update_integer none~update~2->proc~json_update_logical none~update~2->proc~json_update_real none~update~2->proc~json_update_string proc~json_update_real32 json_core%json_update_real32 none~update~2->proc~json_update_real32 none~valid_path~2 json_core%valid_path none~valid_path~2->proc~json_valid_path proc~convert json_core%convert proc~convert->none~info~2 proc~json_add_integer_by_path json_core%json_add_integer_by_path proc~json_add_integer_by_path->none~info~2 none~create json_core%create proc~json_add_integer_by_path->none~create proc~json_add_integer_vec_by_path json_core%json_add_integer_vec_by_path proc~json_add_integer_vec_by_path->none~info~2 proc~json_add_integer_vec_by_path->none~create proc~json_add_logical_by_path json_core%json_add_logical_by_path proc~json_add_logical_by_path->none~info~2 proc~json_add_logical_by_path->none~create proc~json_add_logical_vec_by_path json_core%json_add_logical_vec_by_path proc~json_add_logical_vec_by_path->none~info~2 proc~json_add_logical_vec_by_path->none~create proc~json_add_member_by_path json_core%json_add_member_by_path proc~json_add_member_by_path->none~info~2 proc~json_add_member_by_path->none~create proc~json_add_real_by_path json_core%json_add_real_by_path proc~json_add_real_by_path->none~info~2 proc~json_add_real_by_path->none~create proc~json_add_real_vec_by_path json_core%json_add_real_vec_by_path proc~json_add_real_vec_by_path->none~info~2 proc~json_add_real_vec_by_path->none~create proc~json_add_string_by_path json_core%json_add_string_by_path proc~json_add_string_by_path->none~info~2 proc~json_add_string_by_path->none~create proc~json_add_string_vec_by_path json_core%json_add_string_vec_by_path proc~json_add_string_vec_by_path->none~info~2 proc~json_add_string_vec_by_path->none~create proc~json_file_remove json_file%json_file_remove proc~json_file_remove->none~remove_if_present proc~json_file_update_integer json_file%json_file_update_integer proc~json_file_update_integer->none~update~2 proc~json_file_update_logical json_file%json_file_update_logical proc~json_file_update_logical->none~update~2 proc~json_file_update_real json_file%json_file_update_real proc~json_file_update_real->none~update~2 proc~json_file_update_string json_file%json_file_update_string proc~json_file_update_string->none~update~2 proc~json_file_valid_path json_file%json_file_valid_path proc~json_file_valid_path->none~valid_path~2 proc~json_file_valid_path_op json_file%json_file_valid_path_op proc~json_file_valid_path_op->none~valid_path~2 proc~json_file_variable_info json_file%json_file_variable_info proc~json_file_variable_info->none~info~2 proc~json_file_variable_matrix_info json_file%json_file_variable_matrix_info proc~json_file_variable_matrix_info->none~matrix_info~2 proc~json_get_path json_core%json_get_path proc~json_get_path->none~info~2 proc~json_is_vector json_core%json_is_vector proc~json_is_vector->none~info~2 proc~json_matrix_info->none~info~2 proc~json_update_real32->none~update~2 proc~json_update_string_name_ascii json_update_string_name_ascii proc~json_update_string_name_ascii->none~update~2 proc~json_update_string_val_ascii json_update_string_val_ascii proc~json_update_string_val_ascii->none~update~2 proc~json_value_reverse json_core%json_value_reverse proc~json_value_reverse->none~info~2 proc~wrap_json_file_get_alloc_string_vec wrap_json_file_get_alloc_string_vec proc~wrap_json_file_get_alloc_string_vec->none~get proc~wrap_json_file_get_integer wrap_json_file_get_integer proc~wrap_json_file_get_integer->none~get proc~wrap_json_file_get_integer_vec wrap_json_file_get_integer_vec proc~wrap_json_file_get_integer_vec->none~get proc~wrap_json_file_get_logical wrap_json_file_get_logical proc~wrap_json_file_get_logical->none~get proc~wrap_json_file_get_logical_vec wrap_json_file_get_logical_vec proc~wrap_json_file_get_logical_vec->none~get proc~wrap_json_file_get_object wrap_json_file_get_object proc~wrap_json_file_get_object->none~get proc~wrap_json_file_get_real wrap_json_file_get_real proc~wrap_json_file_get_real->none~get proc~wrap_json_file_get_real32 wrap_json_file_get_real32 proc~wrap_json_file_get_real32->none~get proc~wrap_json_file_get_real32_vec wrap_json_file_get_real32_vec proc~wrap_json_file_get_real32_vec->none~get proc~wrap_json_file_get_real_vec wrap_json_file_get_real_vec proc~wrap_json_file_get_real_vec->none~get proc~wrap_json_file_get_string wrap_json_file_get_string proc~wrap_json_file_get_string->none~get proc~wrap_json_file_get_string_vec wrap_json_file_get_string_vec proc~wrap_json_file_get_string_vec->none~get proc~wrap_json_info_by_path wrap_json_info_by_path proc~wrap_json_info_by_path->none~info~2 proc~wrap_json_matrix_info_by_path wrap_json_matrix_info_by_path proc~wrap_json_matrix_info_by_path->none~matrix_info~2 proc~wrap_json_update_integer wrap_json_update_integer proc~wrap_json_update_integer->none~update~2 proc~wrap_json_update_logical wrap_json_update_logical proc~wrap_json_update_logical->none~update~2 proc~wrap_json_update_real wrap_json_update_real proc~wrap_json_update_real->none~update~2 proc~wrap_json_update_real32 wrap_json_update_real32 proc~wrap_json_update_real32->none~update~2 proc~wrap_json_update_string wrap_json_update_string proc~wrap_json_update_string->none~update~2 proc~wrap_json_valid_path wrap_json_valid_path proc~wrap_json_valid_path->none~valid_path~2 proc~wrap_json_value_remove_if_present wrap_json_value_remove_if_present proc~wrap_json_value_remove_if_present->none~remove_if_present none~add_by_path->proc~json_add_integer_by_path none~add_by_path->proc~json_add_integer_vec_by_path none~add_by_path->proc~json_add_logical_by_path none~add_by_path->proc~json_add_logical_vec_by_path none~add_by_path->proc~json_add_member_by_path none~add_by_path->proc~json_add_real_by_path none~add_by_path->proc~json_add_real_vec_by_path none~add_by_path->proc~json_add_string_by_path none~add_by_path->proc~json_add_string_vec_by_path proc~json_add_real32_by_path json_core%json_add_real32_by_path none~add_by_path->proc~json_add_real32_by_path proc~json_add_real32_vec_by_path json_core%json_add_real32_vec_by_path none~add_by_path->proc~json_add_real32_vec_by_path none~get_path json_core%get_path none~get_path->proc~json_get_path none~info json_file%info none~info->proc~json_file_variable_info none~matrix_info json_file%matrix_info none~matrix_info->proc~json_file_variable_matrix_info none~remove json_file%remove none~remove->proc~json_file_remove none~update json_file%update none~update->proc~json_file_update_integer none~update->proc~json_file_update_logical none~update->proc~json_file_update_real none~update->proc~json_file_update_string proc~json_file_update_real32 json_file%json_file_update_real32 none~update->proc~json_file_update_real32 none~valid_path json_file%valid_path none~valid_path->proc~json_file_valid_path proc~json_add_string_by_path_path_ascii json_add_string_by_path_path_ascii proc~json_add_string_by_path_path_ascii->proc~json_add_string_by_path proc~json_add_string_by_path_value_ascii json_add_string_by_path_value_ascii proc~json_add_string_by_path_value_ascii->proc~json_add_string_by_path proc~json_add_string_vec_by_path_path_ascii json_add_string_vec_by_path_path_ascii proc~json_add_string_vec_by_path_path_ascii->proc~json_add_string_vec_by_path proc~json_add_string_vec_by_path_value_ascii json_add_string_vec_by_path_value_ascii proc~json_add_string_vec_by_path_value_ascii->proc~json_add_string_vec_by_path proc~json_get_by_path_jsonpath_bracket->proc~convert proc~json_value_print json_core%json_value_print proc~json_value_print->proc~json_is_vector proc~json_value_print->proc~json_value_print proc~wrap_json_add_integer_by_path wrap_json_add_integer_by_path proc~wrap_json_add_integer_by_path->proc~json_add_integer_by_path proc~wrap_json_add_integer_vec_by_path wrap_json_add_integer_vec_by_path proc~wrap_json_add_integer_vec_by_path->proc~json_add_integer_vec_by_path proc~wrap_json_add_logical_by_path wrap_json_add_logical_by_path proc~wrap_json_add_logical_by_path->proc~json_add_logical_by_path proc~wrap_json_add_logical_vec_by_path wrap_json_add_logical_vec_by_path proc~wrap_json_add_logical_vec_by_path->proc~json_add_logical_vec_by_path proc~wrap_json_add_member_by_path wrap_json_add_member_by_path proc~wrap_json_add_member_by_path->proc~json_add_member_by_path proc~wrap_json_add_real_by_path wrap_json_add_real_by_path proc~wrap_json_add_real_by_path->proc~json_add_real_by_path proc~wrap_json_add_real_vec_by_path wrap_json_add_real_vec_by_path proc~wrap_json_add_real_vec_by_path->proc~json_add_real_vec_by_path proc~wrap_json_add_string_by_path wrap_json_add_string_by_path proc~wrap_json_add_string_by_path->proc~json_add_string_by_path proc~wrap_json_add_string_vec_by_path wrap_json_add_string_vec_by_path proc~wrap_json_add_string_vec_by_path->proc~json_add_string_vec_by_path proc~json_add_real32_by_path->none~add_by_path proc~json_add_real32_vec_by_path->none~add_by_path proc~json_check_children_for_duplicate_keys json_core%json_check_children_for_duplicate_keys proc~json_check_children_for_duplicate_keys->none~get_path proc~json_create_by_path json_core%json_create_by_path proc~json_create_by_path->proc~json_get_by_path_jsonpath_bracket proc~json_file_add_integer json_file%json_file_add_integer proc~json_file_add_integer->none~add_by_path proc~json_file_add_integer_vec json_file%json_file_add_integer_vec proc~json_file_add_integer_vec->none~add_by_path proc~json_file_add_logical json_file%json_file_add_logical proc~json_file_add_logical->none~add_by_path proc~json_file_add_logical_vec json_file%json_file_add_logical_vec proc~json_file_add_logical_vec->none~add_by_path proc~json_file_add_object json_file%json_file_add_object proc~json_file_add_object->none~add_by_path proc~json_file_add_real json_file%json_file_add_real proc~json_file_add_real->none~add_by_path proc~json_file_add_real32 json_file%json_file_add_real32 proc~json_file_add_real32->none~add_by_path proc~json_file_add_real32_vec json_file%json_file_add_real32_vec proc~json_file_add_real32_vec->none~add_by_path proc~json_file_add_real_vec json_file%json_file_add_real_vec proc~json_file_add_real_vec->none~add_by_path proc~json_file_add_string json_file%json_file_add_string proc~json_file_add_string->none~add_by_path proc~json_file_add_string_vec json_file%json_file_add_string_vec proc~json_file_add_string_vec->none~add_by_path proc~json_file_update_real32->none~update proc~json_file_update_string_name_ascii json_file_update_string_name_ascii proc~json_file_update_string_name_ascii->none~update proc~json_file_update_string_val_ascii json_file_update_string_val_ascii proc~json_file_update_string_val_ascii->none~update proc~json_print_to_unit json_core%json_print_to_unit proc~json_print_to_unit->proc~json_value_print proc~json_value_to_string json_core%json_value_to_string proc~json_value_to_string->proc~json_value_print proc~wrap_json_add_real32_by_path wrap_json_add_real32_by_path proc~wrap_json_add_real32_by_path->none~add_by_path proc~wrap_json_add_real32_vec_by_path wrap_json_add_real32_vec_by_path proc~wrap_json_add_real32_vec_by_path->none~add_by_path proc~wrap_json_file_remove wrap_json_file_remove proc~wrap_json_file_remove->none~remove proc~wrap_json_file_update_integer wrap_json_file_update_integer proc~wrap_json_file_update_integer->none~update proc~wrap_json_file_update_logical wrap_json_file_update_logical proc~wrap_json_file_update_logical->none~update proc~wrap_json_file_update_real wrap_json_file_update_real proc~wrap_json_file_update_real->none~update proc~wrap_json_file_update_real32 wrap_json_file_update_real32 proc~wrap_json_file_update_real32->none~update proc~wrap_json_file_update_string wrap_json_file_update_string proc~wrap_json_file_update_string->none~update proc~wrap_json_file_valid_path wrap_json_file_valid_path proc~wrap_json_file_valid_path->none~valid_path proc~wrap_json_file_variable_info wrap_json_file_variable_info proc~wrap_json_file_variable_info->none~info proc~wrap_json_file_variable_matrix_info wrap_json_file_variable_matrix_info proc~wrap_json_file_variable_matrix_info->none~matrix_info proc~wrap_json_get_path wrap_json_get_path proc~wrap_json_get_path->none~get_path none~create->proc~json_create_by_path proc~assign_json_file_to_string json_file%assign_json_file_to_string proc~assign_json_file_to_string->proc~json_value_to_string proc~json_file_add_string_path_ascii json_file_add_string_path_ascii proc~json_file_add_string_path_ascii->proc~json_file_add_string proc~json_file_add_string_value_ascii json_file_add_string_value_ascii proc~json_file_add_string_value_ascii->proc~json_file_add_string proc~json_file_add_string_vec_path_ascii json_file_add_string_vec_path_ascii proc~json_file_add_string_vec_path_ascii->proc~json_file_add_string_vec proc~json_file_add_string_vec_vec_ascii json_file_add_string_vec_vec_ascii proc~json_file_add_string_vec_vec_ascii->proc~json_file_add_string_vec proc~json_file_print_to_string json_file%json_file_print_to_string proc~json_file_print_to_string->proc~json_value_to_string proc~wrap_json_file_add_integer wrap_json_file_add_integer proc~wrap_json_file_add_integer->proc~json_file_add_integer proc~wrap_json_file_add_integer_vec wrap_json_file_add_integer_vec proc~wrap_json_file_add_integer_vec->proc~json_file_add_integer_vec proc~wrap_json_file_add_logical wrap_json_file_add_logical proc~wrap_json_file_add_logical->proc~json_file_add_logical proc~wrap_json_file_add_logical_vec wrap_json_file_add_logical_vec proc~wrap_json_file_add_logical_vec->proc~json_file_add_logical_vec proc~wrap_json_file_add_object wrap_json_file_add_object proc~wrap_json_file_add_object->proc~json_file_add_object proc~wrap_json_file_add_real wrap_json_file_add_real proc~wrap_json_file_add_real->proc~json_file_add_real proc~wrap_json_file_add_real32 wrap_json_file_add_real32 proc~wrap_json_file_add_real32->proc~json_file_add_real32 proc~wrap_json_file_add_real32_vec wrap_json_file_add_real32_vec proc~wrap_json_file_add_real32_vec->proc~json_file_add_real32_vec proc~wrap_json_file_add_real_vec wrap_json_file_add_real_vec proc~wrap_json_file_add_real_vec->proc~json_file_add_real_vec proc~wrap_json_file_add_string wrap_json_file_add_string proc~wrap_json_file_add_string->proc~json_file_add_string proc~wrap_json_file_add_string_vec wrap_json_file_add_string_vec proc~wrap_json_file_add_string_vec->proc~json_file_add_string_vec proc~wrap_json_create_by_path wrap_json_create_by_path proc~wrap_json_create_by_path->none~create

Source Code

    subroutine json_get_by_path_rfc6901(json, me, path, p, found)

    implicit none

    class(json_core),intent(inout)       :: json
    type(json_value),pointer,intent(in)  :: me     !! a JSON linked list
    character(kind=CK,len=*),intent(in)  :: path   !! path to the variable
                                                   !! (an RFC 6901 "JSON Pointer")
    type(json_value),pointer,intent(out) :: p      !! pointer to the variable
                                                   !! specify by `path`
    logical(LK),intent(out),optional     :: found  !! true if it was found

    character(kind=CK,len=:),allocatable :: token  !! a token in the path (between the `/` characters)
    integer(IK)              :: i                  !! counter
    integer(IK)              :: islash_curr        !! location of current '/' character in the path
    integer(IK)              :: islash_next        !! location of next '/' character in the path
    integer(IK)              :: ilen               !! length of `path` string
    type(json_value),pointer :: tmp                !! temporary variable for traversing the structure
    integer(IK)              :: ival               !! integer array index value (0-based)
    logical(LK)              :: status_ok          !! error flag
    logical(LK)              :: child_found        !! for getting child values

    nullify(p)

    if (.not. json%exception_thrown) then

        p => me ! initialize

        if (path/=CK_'') then

            if (path(1:1)==slash) then  ! the first character must be a slash

                islash_curr = 1   ! initialize current slash index

                !keep trailing space or not:
                if (json%trailing_spaces_significant) then
                    ilen = len(path)
                else
                    ilen = len_trim(path)
                end if

                do

                    ! get the next token by finding the slashes
                    !
                    !  1   2 3
                    !  /abc/d/efg

                    if (islash_curr==ilen) then
                        !the last token is an empty string
                        token = CK_''
                        islash_next = 0  ! will signal to stop
                    else

                        !      .
                        ! '/123/567/'

                        ! index in remaining string:
                        islash_next = index(path(islash_curr+1:ilen),slash)
                        if (islash_next<=0) then
                            !last token:
                            token = path(islash_curr+1:ilen)
                        else
                            ! convert to actual index in path:
                            islash_next = islash_curr + index(path(islash_curr+1:ilen),slash)
                            if (islash_next>islash_curr+1) then
                                token = path(islash_curr+1:islash_next-1)
                            else
                                !empty token:
                                token = CK_''
                            end if
                        end if

                    end if

                    ! remove trailing spaces in the token here if necessary:
                    if (.not. json%trailing_spaces_significant) &
                        token = trim(token)

                    ! decode the token:
                    token = decode_rfc6901(token)

                    ! now, parse the token:

                    ! first see if there is a child with this name
                    call json%get_child(p,token,tmp,child_found)
                    if (child_found) then
                        ! it was found
                        p => tmp
                    else
                        ! No key with this name.
                        ! Is it an integer? If so,
                        ! it might be an array index.
                        status_ok = (len(token)>0)
                        if (status_ok) then
                            do i=1,len(token)
                                ! It must only contain (0..9) characters
                                ! (it must be unsigned)
                                if (scan(token(i:i),CK_'0123456789')<1) then
                                    status_ok = .false.
                                    exit
                                end if
                            end do
                            if (status_ok) then
                                if (len(token)>1 .and. token(1:1)==CK_'0') then
                                    ! leading zeros not allowed for some reason
                                    status_ok = .false.
                                end if
                            end if
                            if (status_ok) then
                                ! if we make it this far, it should be
                                ! convertible to an integer, so do it.
                                call string_to_integer(token,ival,status_ok)
                            end if
                        end if
                        if (status_ok) then
                            ! ival is an array index (0-based)
                            call json%get_child(p,ival+1_IK,tmp,child_found)
                            if (child_found) then
                                p => tmp
                            else
                                ! not found
                                status_ok = .false.
                            end if
                        end if
                        if (.not. status_ok) then
                            call json%throw_exception('Error in json_get_by_path_rfc6901: '//&
                                                      'invalid path specification: '//trim(path),found)
                            exit
                        end if
                    end if

                    if (islash_next<=0) exit ! finished

                    ! set up for next token:
                    islash_curr = islash_next

                end do

            else
                call json%throw_exception('Error in json_get_by_path_rfc6901: '//&
                                            'invalid path specification: '//trim(path),found)
            end if
        end if

        if (json%exception_thrown) then
            nullify(p)
            if (present(found)) then
                found = .false.
                call json%clear_exceptions()
            end if
        else
            if (present(found)) found = .true.
        end if

    else
        if (present(found)) found = .false.
    end if

    end subroutine json_get_by_path_rfc6901