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

Note

Not doing anything special about the - character to index an array. This is considered a normal error.

Note

Unlike in the default path mode, the array indices here are 0-based (in accordance with the RFC 6901 standard)

Warning

Not checking if the member that is referenced is unique. (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.

Warning

I think the standard indicates that the input paths should use 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_value_module::json_core%json_get_by_path_rfc6901 none~get_child json_value_module::json_core%get_child proc~json_get_by_path_rfc6901->none~get_child none~throw_exception json_value_module::json_core%throw_exception proc~json_get_by_path_rfc6901->none~throw_exception proc~decode_rfc6901 json_string_utilities::decode_rfc6901 proc~json_get_by_path_rfc6901->proc~decode_rfc6901 proc~json_clear_exceptions json_value_module::json_core%json_clear_exceptions proc~json_get_by_path_rfc6901->proc~json_clear_exceptions proc~string_to_integer json_string_utilities::string_to_integer proc~json_get_by_path_rfc6901->proc~string_to_integer proc~json_value_get_child json_value_module::json_core%json_value_get_child none~get_child->proc~json_value_get_child proc~json_value_get_child_by_index json_value_module::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_value_module::json_core%json_value_get_child_by_name none~get_child->proc~json_value_get_child_by_name proc~json_throw_exception json_value_module::json_core%json_throw_exception none~throw_exception->proc~json_throw_exception proc~replace_string json_string_utilities::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_value_module::json_core%name_equal proc~json_value_get_child_by_name->proc~name_equal proc~name_strings_equal json_value_module::json_core%name_strings_equal proc~name_equal->proc~name_strings_equal proc~lowercase_string json_string_utilities::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_value_module::json_core%json_get_by_path_rfc6901 proc~json_get_by_path json_value_module::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_value_module::json_core%json_get_by_path_jsonpath_bracket proc~json_get_by_path->proc~json_get_by_path_jsonpath_bracket proc~json_get_by_path_default json_value_module::json_core%json_get_by_path_default proc~json_get_by_path->proc~json_get_by_path_default none~get json_value_module::json_core%get none~get->proc~json_get_by_path proc~json_get_alloc_string_vec json_value_module::json_core%json_get_alloc_string_vec none~get->proc~json_get_alloc_string_vec proc~json_get_alloc_string_vec_by_path json_value_module::json_core%json_get_alloc_string_vec_by_path none~get->proc~json_get_alloc_string_vec_by_path proc~json_get_array_by_path json_value_module::json_core%json_get_array_by_path none~get->proc~json_get_array_by_path proc~json_get_integer_by_path json_value_module::json_core%json_get_integer_by_path none~get->proc~json_get_integer_by_path proc~json_get_integer_vec json_value_module::json_core%json_get_integer_vec none~get->proc~json_get_integer_vec proc~json_get_integer_vec_by_path json_value_module::json_core%json_get_integer_vec_by_path none~get->proc~json_get_integer_vec_by_path proc~json_get_logical_by_path json_value_module::json_core%json_get_logical_by_path none~get->proc~json_get_logical_by_path proc~json_get_logical_vec json_value_module::json_core%json_get_logical_vec none~get->proc~json_get_logical_vec proc~json_get_logical_vec_by_path json_value_module::json_core%json_get_logical_vec_by_path none~get->proc~json_get_logical_vec_by_path proc~json_get_real32 json_value_module::json_core%json_get_real32 none~get->proc~json_get_real32 proc~json_get_real32_by_path json_value_module::json_core%json_get_real32_by_path none~get->proc~json_get_real32_by_path proc~json_get_real32_vec json_value_module::json_core%json_get_real32_vec none~get->proc~json_get_real32_vec proc~json_get_real32_vec_by_path json_value_module::json_core%json_get_real32_vec_by_path none~get->proc~json_get_real32_vec_by_path proc~json_get_real_by_path json_value_module::json_core%json_get_real_by_path none~get->proc~json_get_real_by_path proc~json_get_real_vec json_value_module::json_core%json_get_real_vec none~get->proc~json_get_real_vec proc~json_get_real_vec_by_path json_value_module::json_core%json_get_real_vec_by_path none~get->proc~json_get_real_vec_by_path proc~json_get_string_by_path json_value_module::json_core%json_get_string_by_path none~get->proc~json_get_string_by_path proc~json_get_string_vec json_value_module::json_core%json_get_string_vec none~get->proc~json_get_string_vec proc~json_get_string_vec_by_path json_value_module::json_core%json_get_string_vec_by_path none~get->proc~json_get_string_vec_by_path proc~json_file_get_alloc_string_vec json_file_module::json_file%json_file_get_alloc_string_vec proc~json_file_get_alloc_string_vec->none~get proc~json_file_get_integer json_file_module::json_file%json_file_get_integer proc~json_file_get_integer->none~get proc~json_file_get_integer_vec json_file_module::json_file%json_file_get_integer_vec proc~json_file_get_integer_vec->none~get proc~json_file_get_logical json_file_module::json_file%json_file_get_logical proc~json_file_get_logical->none~get proc~json_file_get_logical_vec json_file_module::json_file%json_file_get_logical_vec proc~json_file_get_logical_vec->none~get proc~json_file_get_object json_file_module::json_file%json_file_get_object proc~json_file_get_object->none~get proc~json_file_get_real json_file_module::json_file%json_file_get_real proc~json_file_get_real->none~get proc~json_file_get_real32 json_file_module::json_file%json_file_get_real32 proc~json_file_get_real32->none~get proc~json_file_get_real32_vec json_file_module::json_file%json_file_get_real32_vec proc~json_file_get_real32_vec->none~get proc~json_file_get_real_vec json_file_module::json_file%json_file_get_real_vec proc~json_file_get_real_vec->none~get proc~json_file_get_string json_file_module::json_file%json_file_get_string proc~json_file_get_string->none~get proc~json_file_get_string_vec json_file_module::json_file%json_file_get_string_vec proc~json_file_get_string_vec->none~get proc~json_get_alloc_string_vec->none~get none~string_info json_value_module::json_core%string_info proc~json_get_alloc_string_vec->none~string_info proc~json_get_alloc_string_vec_by_path->none~get proc~json_get_array_by_path->none~get proc~json_get_integer_by_path->none~get proc~json_get_integer_vec->none~get proc~json_get_integer_vec_by_path->none~get proc~json_get_logical_by_path->none~get proc~json_get_logical_vec->none~get proc~json_get_logical_vec_by_path->none~get proc~json_get_real32->none~get proc~json_get_real32_by_path->none~get proc~json_get_real32_vec->none~get proc~json_get_real32_vec_by_path->none~get proc~json_get_real_by_path->none~get proc~json_get_real_vec->none~get proc~json_get_real_vec_by_path->none~get proc~json_get_string_by_path->none~get proc~json_get_string_vec->none~get proc~json_get_string_vec_by_path->none~get proc~json_info_by_path json_value_module::json_core%json_info_by_path proc~json_info_by_path->none~get none~info json_value_module::json_core%info proc~json_info_by_path->none~info proc~json_matrix_info_by_path json_value_module::json_core%json_matrix_info_by_path proc~json_matrix_info_by_path->none~get none~matrix_info json_value_module::json_core%matrix_info proc~json_matrix_info_by_path->none~matrix_info proc~json_rename_by_path json_value_module::json_core%json_rename_by_path proc~json_rename_by_path->none~get proc~json_string_info json_value_module::json_core%json_string_info proc~json_string_info->none~get proc~json_string_info->none~info proc~json_update_integer json_value_module::json_core%json_update_integer proc~json_update_integer->none~get proc~json_update_integer->none~info none~add_by_path json_value_module::json_core%add_by_path proc~json_update_integer->none~add_by_path proc~json_update_logical json_value_module::json_core%json_update_logical proc~json_update_logical->none~get proc~json_update_logical->none~info proc~json_update_logical->none~add_by_path proc~json_update_real json_value_module::json_core%json_update_real proc~json_update_real->none~get proc~json_update_real->none~info proc~json_update_real->none~add_by_path proc~json_update_string json_value_module::json_core%json_update_string proc~json_update_string->none~get proc~json_update_string->none~info proc~json_update_string->none~add_by_path proc~json_valid_path json_value_module::json_core%json_valid_path proc~json_valid_path->none~get proc~json_value_remove_if_present json_value_module::json_core%json_value_remove_if_present proc~json_value_remove_if_present->none~get proc~wrap_json_get_alloc_string_vec_by_path json_value_module::wrap_json_get_alloc_string_vec_by_path proc~wrap_json_get_alloc_string_vec_by_path->none~get proc~wrap_json_get_array_by_path json_value_module::wrap_json_get_array_by_path proc~wrap_json_get_array_by_path->none~get proc~wrap_json_get_by_path json_value_module::wrap_json_get_by_path proc~wrap_json_get_by_path->none~get proc~wrap_json_get_integer_by_path json_value_module::wrap_json_get_integer_by_path proc~wrap_json_get_integer_by_path->none~get proc~wrap_json_get_integer_vec_by_path json_value_module::wrap_json_get_integer_vec_by_path proc~wrap_json_get_integer_vec_by_path->none~get proc~wrap_json_get_logical_by_path json_value_module::wrap_json_get_logical_by_path proc~wrap_json_get_logical_by_path->none~get proc~wrap_json_get_logical_vec_by_path json_value_module::wrap_json_get_logical_vec_by_path proc~wrap_json_get_logical_vec_by_path->none~get proc~wrap_json_get_real32_by_path json_value_module::wrap_json_get_real32_by_path proc~wrap_json_get_real32_by_path->none~get proc~wrap_json_get_real32_vec_by_path json_value_module::wrap_json_get_real32_vec_by_path proc~wrap_json_get_real32_vec_by_path->none~get proc~wrap_json_get_real_by_path json_value_module::wrap_json_get_real_by_path proc~wrap_json_get_real_by_path->none~get proc~wrap_json_get_real_vec_by_path json_value_module::wrap_json_get_real_vec_by_path proc~wrap_json_get_real_vec_by_path->none~get proc~wrap_json_get_string_by_path json_value_module::wrap_json_get_string_by_path proc~wrap_json_get_string_by_path->none~get proc~wrap_json_get_string_vec_by_path json_value_module::wrap_json_get_string_vec_by_path proc~wrap_json_get_string_vec_by_path->none~get proc~wrap_json_value_get_child_by_name json_value_module::wrap_json_value_get_child_by_name proc~wrap_json_value_get_child_by_name->none~get none~get~2 json_file_module::json_file%get none~get~2->proc~json_file_get_alloc_string_vec none~get~2->proc~json_file_get_integer none~get~2->proc~json_file_get_integer_vec none~get~2->proc~json_file_get_logical none~get~2->proc~json_file_get_logical_vec none~get~2->proc~json_file_get_object none~get~2->proc~json_file_get_real none~get~2->proc~json_file_get_real32 none~get~2->proc~json_file_get_real32_vec none~get~2->proc~json_file_get_real_vec none~get~2->proc~json_file_get_string none~get~2->proc~json_file_get_string_vec none~info->proc~json_info_by_path none~matrix_info->proc~json_matrix_info_by_path proc~json_matrix_info json_value_module::json_core%json_matrix_info none~matrix_info->proc~json_matrix_info none~remove_if_present json_value_module::json_core%remove_if_present none~remove_if_present->proc~json_value_remove_if_present none~string_info->proc~json_string_info none~update json_value_module::json_core%update none~update->proc~json_update_integer none~update->proc~json_update_logical none~update->proc~json_update_real none~update->proc~json_update_string proc~json_update_real32 json_value_module::json_core%json_update_real32 none~update->proc~json_update_real32 none~valid_path json_value_module::json_core%valid_path none~valid_path->proc~json_valid_path proc~convert json_value_module::json_core%convert proc~convert->none~info proc~json_add_integer_by_path json_value_module::json_core%json_add_integer_by_path proc~json_add_integer_by_path->none~info none~create json_value_module::json_core%create proc~json_add_integer_by_path->none~create proc~json_add_integer_vec_by_path json_value_module::json_core%json_add_integer_vec_by_path proc~json_add_integer_vec_by_path->none~info none~add json_value_module::json_core%add proc~json_add_integer_vec_by_path->none~add proc~json_add_integer_vec_by_path->none~create proc~json_add_logical_by_path json_value_module::json_core%json_add_logical_by_path proc~json_add_logical_by_path->none~info proc~json_add_logical_by_path->none~create proc~json_add_logical_vec_by_path json_value_module::json_core%json_add_logical_vec_by_path proc~json_add_logical_vec_by_path->none~info proc~json_add_logical_vec_by_path->none~add proc~json_add_logical_vec_by_path->none~create proc~json_add_member_by_path json_value_module::json_core%json_add_member_by_path proc~json_add_member_by_path->none~info proc~json_add_member_by_path->none~create proc~json_add_real_by_path json_value_module::json_core%json_add_real_by_path proc~json_add_real_by_path->none~info proc~json_add_real_by_path->none~create proc~json_add_real_vec_by_path json_value_module::json_core%json_add_real_vec_by_path proc~json_add_real_vec_by_path->none~info proc~json_add_real_vec_by_path->none~add proc~json_add_real_vec_by_path->none~create proc~json_add_string_by_path json_value_module::json_core%json_add_string_by_path proc~json_add_string_by_path->none~info proc~json_add_string_by_path->none~create proc~json_add_string_vec_by_path json_value_module::json_core%json_add_string_vec_by_path proc~json_add_string_vec_by_path->none~info proc~json_add_string_vec_by_path->none~add proc~json_add_string_vec_by_path->none~create proc~json_file_remove json_file_module::json_file%json_file_remove proc~json_file_remove->none~remove_if_present proc~json_file_update_integer json_file_module::json_file%json_file_update_integer proc~json_file_update_integer->none~update proc~json_file_update_logical json_file_module::json_file%json_file_update_logical proc~json_file_update_logical->none~update proc~json_file_update_real json_file_module::json_file%json_file_update_real proc~json_file_update_real->none~update proc~json_file_update_string json_file_module::json_file%json_file_update_string proc~json_file_update_string->none~update proc~json_file_valid_path json_file_module::json_file%json_file_valid_path proc~json_file_valid_path->none~valid_path proc~json_file_valid_path_op json_file_module::json_file%json_file_valid_path_op proc~json_file_valid_path_op->none~valid_path proc~json_file_variable_info json_file_module::json_file%json_file_variable_info proc~json_file_variable_info->none~info proc~json_file_variable_matrix_info json_file_module::json_file%json_file_variable_matrix_info proc~json_file_variable_matrix_info->none~matrix_info proc~json_get_path json_value_module::json_core%json_get_path proc~json_get_path->none~info proc~json_is_vector json_value_module::json_core%json_is_vector proc~json_is_vector->none~info proc~json_matrix_info->none~info proc~json_update_real32->none~update proc~json_update_string_name_ascii json_value_module::json_update_string_name_ascii proc~json_update_string_name_ascii->none~update proc~json_update_string_val_ascii json_value_module::json_update_string_val_ascii proc~json_update_string_val_ascii->none~update proc~json_value_add_member json_value_module::json_core%json_value_add_member proc~json_value_add_member->none~info proc~json_value_reverse json_value_module::json_core%json_value_reverse proc~json_value_reverse->none~info proc~wrap_json_file_get_alloc_string_vec json_file_module::wrap_json_file_get_alloc_string_vec proc~wrap_json_file_get_alloc_string_vec->none~get~2 proc~wrap_json_file_get_integer json_file_module::wrap_json_file_get_integer proc~wrap_json_file_get_integer->none~get~2 proc~wrap_json_file_get_integer_vec json_file_module::wrap_json_file_get_integer_vec proc~wrap_json_file_get_integer_vec->none~get~2 proc~wrap_json_file_get_logical json_file_module::wrap_json_file_get_logical proc~wrap_json_file_get_logical->none~get~2 proc~wrap_json_file_get_logical_vec json_file_module::wrap_json_file_get_logical_vec proc~wrap_json_file_get_logical_vec->none~get~2 proc~wrap_json_file_get_object json_file_module::wrap_json_file_get_object proc~wrap_json_file_get_object->none~get~2 proc~wrap_json_file_get_real json_file_module::wrap_json_file_get_real proc~wrap_json_file_get_real->none~get~2 proc~wrap_json_file_get_real32 json_file_module::wrap_json_file_get_real32 proc~wrap_json_file_get_real32->none~get~2 proc~wrap_json_file_get_real32_vec json_file_module::wrap_json_file_get_real32_vec proc~wrap_json_file_get_real32_vec->none~get~2 proc~wrap_json_file_get_real_vec json_file_module::wrap_json_file_get_real_vec proc~wrap_json_file_get_real_vec->none~get~2 proc~wrap_json_file_get_string json_file_module::wrap_json_file_get_string proc~wrap_json_file_get_string->none~get~2 proc~wrap_json_file_get_string_vec json_file_module::wrap_json_file_get_string_vec proc~wrap_json_file_get_string_vec->none~get~2 proc~wrap_json_info_by_path json_value_module::wrap_json_info_by_path proc~wrap_json_info_by_path->none~info proc~wrap_json_matrix_info_by_path json_value_module::wrap_json_matrix_info_by_path proc~wrap_json_matrix_info_by_path->none~matrix_info proc~wrap_json_update_integer json_value_module::wrap_json_update_integer proc~wrap_json_update_integer->none~update proc~wrap_json_update_logical json_value_module::wrap_json_update_logical proc~wrap_json_update_logical->none~update proc~wrap_json_update_real json_value_module::wrap_json_update_real proc~wrap_json_update_real->none~update proc~wrap_json_update_real32 json_value_module::wrap_json_update_real32 proc~wrap_json_update_real32->none~update proc~wrap_json_update_string json_value_module::wrap_json_update_string proc~wrap_json_update_string->none~update proc~wrap_json_valid_path json_value_module::wrap_json_valid_path proc~wrap_json_valid_path->none~valid_path proc~wrap_json_value_remove_if_present json_value_module::wrap_json_value_remove_if_present proc~wrap_json_value_remove_if_present->none~remove_if_present none~add->proc~json_value_add_member proc~json_value_add_integer json_value_module::json_core%json_value_add_integer none~add->proc~json_value_add_integer proc~json_value_add_integer_vec json_value_module::json_core%json_value_add_integer_vec none~add->proc~json_value_add_integer_vec proc~json_value_add_logical json_value_module::json_core%json_value_add_logical none~add->proc~json_value_add_logical proc~json_value_add_logical_vec json_value_module::json_core%json_value_add_logical_vec none~add->proc~json_value_add_logical_vec proc~json_value_add_null json_value_module::json_core%json_value_add_null none~add->proc~json_value_add_null proc~json_value_add_real json_value_module::json_core%json_value_add_real none~add->proc~json_value_add_real proc~json_value_add_real32 json_value_module::json_core%json_value_add_real32 none~add->proc~json_value_add_real32 proc~json_value_add_real32_vec json_value_module::json_core%json_value_add_real32_vec none~add->proc~json_value_add_real32_vec proc~json_value_add_real_vec json_value_module::json_core%json_value_add_real_vec none~add->proc~json_value_add_real_vec proc~json_value_add_string json_value_module::json_core%json_value_add_string none~add->proc~json_value_add_string proc~json_value_add_string_vec json_value_module::json_core%json_value_add_string_vec none~add->proc~json_value_add_string_vec 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_value_module::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_value_module::json_core%json_add_real32_vec_by_path none~add_by_path->proc~json_add_real32_vec_by_path none~get_path json_value_module::json_core%get_path none~get_path->proc~json_get_path none~info~2 json_file_module::json_file%info none~info~2->proc~json_file_variable_info none~matrix_info~2 json_file_module::json_file%matrix_info none~matrix_info~2->proc~json_file_variable_matrix_info none~remove~2 json_file_module::json_file%remove none~remove~2->proc~json_file_remove none~update~2 json_file_module::json_file%update none~update~2->proc~json_file_update_integer none~update~2->proc~json_file_update_logical none~update~2->proc~json_file_update_real none~update~2->proc~json_file_update_string proc~json_file_update_real32 json_file_module::json_file%json_file_update_real32 none~update~2->proc~json_file_update_real32 none~valid_path~2 json_file_module::json_file%valid_path none~valid_path~2->proc~json_file_valid_path proc~json_add_string_by_path_path_ascii json_value_module::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_value_module::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_value_module::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_value_module::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_get_by_path_jsonpath_bracket->none~add proc~json_value_print json_value_module::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 json_value_module::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 json_value_module::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 json_value_module::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 json_value_module::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 json_value_module::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 json_value_module::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 json_value_module::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 json_value_module::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 json_value_module::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_value_module::json_core%json_check_children_for_duplicate_keys proc~json_check_children_for_duplicate_keys->none~get_path proc~json_create_by_path json_value_module::json_core%json_create_by_path proc~json_create_by_path->proc~json_get_by_path_jsonpath_bracket proc~json_create_by_path->proc~json_get_by_path_default proc~json_file_add_integer json_file_module::json_file%json_file_add_integer proc~json_file_add_integer->none~add_by_path proc~json_file_add_integer_vec json_file_module::json_file%json_file_add_integer_vec proc~json_file_add_integer_vec->none~add_by_path proc~json_file_add_logical json_file_module::json_file%json_file_add_logical proc~json_file_add_logical->none~add_by_path proc~json_file_add_logical_vec json_file_module::json_file%json_file_add_logical_vec proc~json_file_add_logical_vec->none~add_by_path proc~json_file_add_object json_file_module::json_file%json_file_add_object proc~json_file_add_object->none~add_by_path proc~json_file_add_real json_file_module::json_file%json_file_add_real proc~json_file_add_real->none~add_by_path proc~json_file_add_real32 json_file_module::json_file%json_file_add_real32 proc~json_file_add_real32->none~add_by_path proc~json_file_add_real32_vec json_file_module::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_module::json_file%json_file_add_real_vec proc~json_file_add_real_vec->none~add_by_path proc~json_file_add_string json_file_module::json_file%json_file_add_string proc~json_file_add_string->none~add_by_path proc~json_file_add_string_vec json_file_module::json_file%json_file_add_string_vec proc~json_file_add_string_vec->none~add_by_path proc~json_file_update_real32->none~update~2 proc~json_file_update_string_name_ascii json_file_module::json_file_update_string_name_ascii proc~json_file_update_string_name_ascii->none~update~2 proc~json_file_update_string_val_ascii json_file_module::json_file_update_string_val_ascii proc~json_file_update_string_val_ascii->none~update~2 proc~json_get_by_path_default->none~add proc~json_print_to_unit json_value_module::json_core%json_print_to_unit proc~json_print_to_unit->proc~json_value_print proc~json_value_add_integer->none~add proc~json_value_add_integer_vec->none~add proc~json_value_add_logical->none~add proc~json_value_add_logical_vec->none~add proc~json_value_add_null->none~add proc~json_value_add_real->none~add proc~json_value_add_real32->none~add proc~json_value_add_real32_vec->none~add proc~json_value_add_real_vec->none~add proc~json_value_add_string->none~add proc~json_value_add_string_name_ascii json_value_module::json_value_add_string_name_ascii proc~json_value_add_string_name_ascii->none~add proc~json_value_add_string_val_ascii json_value_module::json_value_add_string_val_ascii proc~json_value_add_string_val_ascii->none~add proc~json_value_add_string_vec->none~add proc~json_value_add_string_vec_name_ascii json_value_module::json_value_add_string_vec_name_ascii proc~json_value_add_string_vec_name_ascii->none~add proc~json_value_add_string_vec_val_ascii json_value_module::json_value_add_string_vec_val_ascii proc~json_value_add_string_vec_val_ascii->none~add proc~json_value_to_string json_value_module::json_core%json_value_to_string proc~json_value_to_string->proc~json_value_print proc~parse_array json_value_module::json_core%parse_array proc~parse_array->none~add proc~parse_value json_value_module::json_core%parse_value proc~parse_array->proc~parse_value proc~parse_object json_value_module::json_core%parse_object proc~parse_object->none~add proc~parse_object->proc~parse_object proc~parse_object->proc~parse_value proc~wrap_json_add_real32_by_path json_value_module::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 json_value_module::wrap_json_add_real32_vec_by_path proc~wrap_json_add_real32_vec_by_path->none~add_by_path proc~wrap_json_file_remove json_file_module::wrap_json_file_remove proc~wrap_json_file_remove->none~remove~2 proc~wrap_json_file_update_integer json_file_module::wrap_json_file_update_integer proc~wrap_json_file_update_integer->none~update~2 proc~wrap_json_file_update_logical json_file_module::wrap_json_file_update_logical proc~wrap_json_file_update_logical->none~update~2 proc~wrap_json_file_update_real json_file_module::wrap_json_file_update_real proc~wrap_json_file_update_real->none~update~2 proc~wrap_json_file_update_real32 json_file_module::wrap_json_file_update_real32 proc~wrap_json_file_update_real32->none~update~2 proc~wrap_json_file_update_string json_file_module::wrap_json_file_update_string proc~wrap_json_file_update_string->none~update~2 proc~wrap_json_file_valid_path json_file_module::wrap_json_file_valid_path proc~wrap_json_file_valid_path->none~valid_path~2 proc~wrap_json_file_variable_info json_file_module::wrap_json_file_variable_info proc~wrap_json_file_variable_info->none~info~2 proc~wrap_json_file_variable_matrix_info json_file_module::wrap_json_file_variable_matrix_info proc~wrap_json_file_variable_matrix_info->none~matrix_info~2 proc~wrap_json_get_path json_value_module::wrap_json_get_path proc~wrap_json_get_path->none~get_path proc~wrap_json_value_add_integer json_value_module::wrap_json_value_add_integer proc~wrap_json_value_add_integer->none~add proc~wrap_json_value_add_integer_vec json_value_module::wrap_json_value_add_integer_vec proc~wrap_json_value_add_integer_vec->none~add proc~wrap_json_value_add_logical json_value_module::wrap_json_value_add_logical proc~wrap_json_value_add_logical->none~add proc~wrap_json_value_add_logical_vec json_value_module::wrap_json_value_add_logical_vec proc~wrap_json_value_add_logical_vec->none~add proc~wrap_json_value_add_null json_value_module::wrap_json_value_add_null proc~wrap_json_value_add_null->none~add proc~wrap_json_value_add_real json_value_module::wrap_json_value_add_real proc~wrap_json_value_add_real->none~add proc~wrap_json_value_add_real32 json_value_module::wrap_json_value_add_real32 proc~wrap_json_value_add_real32->none~add proc~wrap_json_value_add_real32_vec json_value_module::wrap_json_value_add_real32_vec proc~wrap_json_value_add_real32_vec->none~add proc~wrap_json_value_add_real_vec json_value_module::wrap_json_value_add_real_vec proc~wrap_json_value_add_real_vec->none~add proc~wrap_json_value_add_string json_value_module::wrap_json_value_add_string proc~wrap_json_value_add_string->none~add proc~wrap_json_value_add_string_vec json_value_module::wrap_json_value_add_string_vec proc~wrap_json_value_add_string_vec->none~add none~create->proc~json_create_by_path proc~assign_json_file_to_string json_file_module::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_module::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_module::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_module::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_module::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_module::json_file%json_file_print_to_string proc~json_file_print_to_string->proc~json_value_to_string proc~parse_value->proc~parse_array proc~parse_value->proc~parse_object proc~wrap_json_file_add_integer json_file_module::wrap_json_file_add_integer proc~wrap_json_file_add_integer->proc~json_file_add_integer proc~wrap_json_file_add_integer_vec json_file_module::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 json_file_module::wrap_json_file_add_logical proc~wrap_json_file_add_logical->proc~json_file_add_logical proc~wrap_json_file_add_logical_vec json_file_module::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 json_file_module::wrap_json_file_add_object proc~wrap_json_file_add_object->proc~json_file_add_object proc~wrap_json_file_add_real json_file_module::wrap_json_file_add_real proc~wrap_json_file_add_real->proc~json_file_add_real proc~wrap_json_file_add_real32 json_file_module::wrap_json_file_add_real32 proc~wrap_json_file_add_real32->proc~json_file_add_real32 proc~wrap_json_file_add_real32_vec json_file_module::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 json_file_module::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 json_file_module::wrap_json_file_add_string proc~wrap_json_file_add_string->proc~json_file_add_string proc~wrap_json_file_add_string_vec json_file_module::wrap_json_file_add_string_vec proc~wrap_json_file_add_string_vec->proc~json_file_add_string_vec proc~json_parse_file json_value_module::json_core%json_parse_file proc~json_parse_file->proc~parse_value proc~json_parse_string json_value_module::json_core%json_parse_string proc~json_parse_string->proc~parse_value proc~wrap_json_create_by_path json_value_module::wrap_json_create_by_path proc~wrap_json_create_by_path->none~create none~deserialize json_value_module::json_core%deserialize none~deserialize->proc~json_parse_string none~load json_value_module::json_core%load none~load->proc~json_parse_file proc~json_file_load json_file_module::json_file%json_file_load proc~json_file_load->none~load proc~json_file_load_from_string json_file_module::json_file%json_file_load_from_string proc~json_file_load_from_string->none~deserialize proc~wrap_json_parse_string json_value_module::wrap_json_parse_string proc~wrap_json_parse_string->none~deserialize none~deserialize~2 json_file_module::json_file%deserialize none~deserialize~2->proc~json_file_load_from_string proc~assign_string_to_json_file json_file_module::json_file%assign_string_to_json_file proc~assign_string_to_json_file->none~deserialize~2 proc~initialize_json_file_from_string json_file_module::initialize_json_file_from_string proc~initialize_json_file_from_string->none~deserialize~2 proc~initialize_json_file_from_string_v2 json_file_module::initialize_json_file_from_string_v2 proc~initialize_json_file_from_string_v2->none~deserialize~2 proc~wrap_json_file_load_from_string json_file_module::wrap_json_file_load_from_string proc~wrap_json_file_load_from_string->none~deserialize~2 interface~json_file json_file_module::json_file interface~json_file->proc~initialize_json_file_from_string interface~json_file->proc~initialize_json_file_from_string_v2 proc~wrap_assign_string_to_json_file json_file_module::wrap_assign_string_to_json_file proc~wrap_assign_string_to_json_file->proc~assign_string_to_json_file proc~wrap_initialize_json_file_from_string json_file_module::wrap_initialize_json_file_from_string proc~wrap_initialize_json_file_from_string->proc~initialize_json_file_from_string proc~wrap_initialize_json_file_from_string_v2 json_file_module::wrap_initialize_json_file_from_string_v2 proc~wrap_initialize_json_file_from_string_v2->proc~initialize_json_file_from_string_v2

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