You could have used DTIO if the JSON table was defined as a Fortran unit and had a simple linear structure, but that’s not the case:
type(mytype) :: var
write(unit,'(DTjson)') var
With the current facilities, I think the closest you can get to a decent UX is by defining a parent abstract class:
type, abstract :: jsonifiable
contains
procedure(to_json) :: write
procedure(from_json) :: read
end type
So that each parent derived type would call it for all children and you get the nested structure. However, Fortran has no multiple inheritance, so basically all derived types in the program would need to extend this “superclass”. No free lunch here.