json_clone Subroutine

private subroutine json_clone(json, from, to)

Create a deep copy of a json_value linked-list structure.


  • If from has children, then they are also cloned.
  • The parent of from is not linked to to.
  • If from is an element of an array, then the previous and next entries are not cloned (only that element and it’s children, if any).


    program test
     use json_module
     implicit none
     type(json_core) :: json
     type(json_value),pointer :: j1, j2
     call json%load('files/inputs/test1.json',j1)
     call json%clone(j1,j2) !now have two independent copies
     call json%destroy(j1)  !destroys j1, but j2 remains
     call json%print(j2,'j2.json')
     call json%destroy(j2)
    end program test

Type Bound



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

this is the structure to clone

type(json_value), pointer :: to

the clone is put here (it must not already be associated)


proc~~json_clone~~CallsGraph proc~json_clone json_core%json_clone proc~json_value_clone_func json_core%json_value_clone_func proc~json_clone->proc~json_value_clone_func proc~json_value_clone_func->proc~json_value_clone_func

Called by

proc~~json_clone~~CalledByGraph proc~json_clone json_core%json_clone proc~assign_json_file json_file%assign_json_file proc~assign_json_file->proc~json_clone

Source Code

    subroutine json_clone(json,from,to)

    implicit none

    class(json_core),intent(inout) :: json
    type(json_value),pointer :: from  !! this is the structure to clone
    type(json_value),pointer :: to    !! the clone is put here
                                      !! (it must not already be associated)

    !call the main function:
    call json%json_value_clone_func(from,to)

    end subroutine json_clone