To access the core routines for manipulation of json_value pointer variables. This class allows for thread safe use of the module.
program test use json_module implicit none type(json_core) :: json !<--have to declare this type(json_value),pointer :: p call json%create_object(p,'') !create the root call json%add(p,'year',1805) !add some data call json%add(p,'value',1.0_RK) !add some data call json%print(p,'test.json') !write it to a file call json%destroy(p) !cleanup end program test
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
logical(kind=LK), | private | :: | allow_comments | = | .true. | if true, any comments will be ignored when
parsing a file. The comment token is defined
by the |
|
logical(kind=LK), | private | :: | case_sensitive_keys | = | .true. | for name and path comparisons, are they case sensitive. |
|
integer(kind=IK), | private | :: | char_count | = | 0 | character position in the current line |
|
character(kind=CK,len=1), | private | :: | comment_char | = | CK_'!' | comment token when
|
|
logical(kind=LK), | private | :: | compact_real | = | .true. | to use the "compact" form of real numbers for output |
|
logical(kind=LK), | private | :: | compress_vectors | = | .false. | If true, then arrays of integers,
nulls, doubles, & logicals are
printed all on one line.
[Note: |
|
character(kind=CK,len=:), | private, | allocatable | :: | err_message | the error message |
||
logical(kind=LK), | private | :: | exception_thrown | = | .false. | The error flag. Will be set to true when an error is thrown in the class. Many of the methods will check this and return immediately if it is true. |
|
integer(kind=IK), | private | :: | ipos | = | 1 | for allocatable strings: next character to read |
|
logical(kind=LK), | private | :: | is_verbose | = | .false. | if true, all exceptions are immediately printed to console. |
|
integer(kind=IK), | private | :: | line_count | = | 1 | lines read counter |
|
logical(kind=LK), | private | :: | no_whitespace | = | .false. | when printing a JSON string, don't include non-significant spaces or line breaks. If true, the entire structure will be printed on one line. |
|
integer(kind=IK), | private | :: | path_mode | = | 1_IK | How the path strings are interpreted in the
|
|
character(kind=CK,len=1), | private | :: | path_separator | = | dot | The |
|
character(kind=CK,len=pushed_char_size), | private | :: | pushed_char | = | CK_'' | used when parsing lines in file |
|
integer(kind=IK), | private | :: | pushed_index | = | 0 | used when parsing lines in file |
|
character(kind=CDK,len=:), | private, | allocatable | :: | real_fmt | the format string to use
for converting real numbers to strings.
It can be set in json_initialize,
and used in json_value_print
If not set, then |
||
integer(kind=IK), | private | :: | spaces_per_tab | = | 2 | number of spaces for indenting |
|
logical(kind=LK), | private | :: | strict_type_checking | = | .false. | if true, then no type conversions are done
in the |
|
logical(kind=LK), | private | :: | trailing_spaces_significant | = | .false. | for name and path comparisons, is trailing space to be considered significant. |
|
logical(kind=LK), | private | :: | unescaped_strings | = | .true. | If false, then the raw escaped string is returned from json_get_string and similar routines. If true [default], then the string is returned unescaped. |
Structure constructor to initialize a json_core object
Function constructor for a json_core. This is just a wrapper for json_initialize.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
logical(kind=LK), | intent(in), | optional | :: | verbose | mainly useful for debugging (default is false) |
|
logical(kind=LK), | intent(in), | optional | :: | compact_reals | to compact the real number strings for output (default is true) |
|
logical(kind=LK), | intent(in), | optional | :: | print_signs | always print numeric sign (default is false) |
|
character(kind=CDK,len=*), | intent(in), | optional | :: | real_format | Real number format: 'E' [default], '*', 'G', 'EN', or 'ES' |
|
integer(kind=IK), | intent(in), | optional | :: | spaces_per_tab | number of spaces per tab for indenting (default is 2) |
|
logical(kind=LK), | intent(in), | optional | :: | strict_type_checking | if true, no integer, double, or logical type
conversions are done for the |
|
logical(kind=LK), | intent(in), | optional | :: | trailing_spaces_significant | for name and path comparisons, is trailing space to be considered significant. (default is false) |
|
logical(kind=LK), | intent(in), | optional | :: | case_sensitive_keys | for name and path comparisons, are they case sensitive. (default is true) |
|
logical(kind=LK), | intent(in), | optional | :: | no_whitespace | if true, printing the JSON structure is done without adding any non-significant spaces or linebreaks (default is false) |
|
logical(kind=LK), | intent(in), | optional | :: | unescape_strings | If false, then the raw escaped string is returned from json_get_string and similar routines. If true [default], then the string is returned unescaped. |
|
character(kind=CK,len=1), | intent(in), | optional | :: | comment_char | If present, this character is used
to denote comments in the JSON file,
which will be ignored if present.
Example: |
|
integer(kind=IK), | intent(in), | optional | :: | path_mode | How the path strings are interpreted in the
|
|
character(kind=CK,len=1), | intent(in), | optional | :: | path_separator | The |
|
logical(kind=LK), | intent(in), | optional | :: | compress_vectors | If true, then arrays of integers,
nulls, doubles, and logicals are
printed all on one line.
[Note: |
Add objects to a linked list of json_values.
It might make more sense to call this add_child
.
Adds member
as a child of p
.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
type(json_value), | pointer | :: | member | the child member
to add to |
Add a NULL value child to the json_value variable
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | name |
Add an integer value child to the json_value variable
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | name | |||
integer(kind=IK), | intent(in) | :: | val |
Add an integer vector to the structure.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | name | name of the variable |
||
integer(kind=IK), | intent(in), | dimension(:) | :: | val | value |
Add a real value child to the json_value variable
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | name | variable name |
||
real(kind=RK), | intent(in) | :: | val | real value |
Add a real vector to the structure.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | name | |||
real(kind=RK), | intent(in), | dimension(:) | :: | val |
Add a logical value child to the json_value variable
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | name | name of the variable |
||
logical(kind=LK), | intent(in) | :: | val | value |
Add a logical vector to the structure.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | name | name of the vector |
||
logical(kind=LK), | intent(in), | dimension(:) | :: | val | value |
Add a character string child to the json_value variable.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | name | name of the variable |
||
character(kind=CK,len=*), | intent(in) | :: | val | value |
Add an array of character strings to the structure.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | name | variable name |
||
character(kind=CK,len=*), | intent(in), | dimension(:) | :: | val | array of strings |
|
logical(kind=LK), | intent(in), | optional | :: | trim_str | if TRIM() should be called for each element |
|
logical(kind=LK), | intent(in), | optional | :: | adjustl_str | if ADJUSTL() should be called for each element |
Add variables to a json_value linked list by specifying their paths.
use, intrinsic :: iso_fortran_env, only: output_unit, wp=>real64 use json_module type(json_core) :: json type(json_value) :: p call json%create_object(p,'root') ! create the root ! now add some variables using the paths: call json%add_by_path(p,'inputs.t', 0.0_wp ) call json%add_by_path(p,'inputs.x(1)', 100.0_wp) call json%add_by_path(p,'inputs.x(2)', 200.0_wp) call json%print(p,output_unit) ! now print to console
json_core%update
methods.Add a new member (json_value
pointer) to a JSON structure, given the path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | me | the JSON structure |
||
character(kind=CK,len=*), | intent(in) | :: | path | the path to the variable |
||
type(json_value), | intent(in), | pointer | :: | p | the value to add |
|
logical(kind=LK), | intent(out), | optional | :: | found | if the variable was found |
|
logical(kind=LK), | intent(out), | optional | :: | was_created | if the variable had to be created |
Add an integer value to a json_value, given the path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | me | the JSON structure |
||
character(kind=CK,len=*), | intent(in) | :: | path | the path to the variable |
||
integer(kind=IK), | intent(in) | :: | value | the value to add |
||
logical(kind=LK), | intent(out), | optional | :: | found | if the variable was found |
|
logical(kind=LK), | intent(out), | optional | :: | was_created | if the variable had to be created |
Add an double value to a json_value, given the path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | me | the JSON structure |
||
character(kind=CK,len=*), | intent(in) | :: | path | the path to the variable |
||
real(kind=RK), | intent(in) | :: | value | the value to add |
||
logical(kind=LK), | intent(out), | optional | :: | found | if the variable was found |
|
logical(kind=LK), | intent(out), | optional | :: | was_created | if the variable had to be created |
Add a logical value to a json_value, given the path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | me | the JSON structure |
||
character(kind=CK,len=*), | intent(in) | :: | path | the path to the variable |
||
logical(kind=LK), | intent(in) | :: | value | the value to add |
||
logical(kind=LK), | intent(out), | optional | :: | found | if the variable was found |
|
logical(kind=LK), | intent(out), | optional | :: | was_created | if the variable had to be created |
Add a string value to a json_value, given the path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | me | the JSON structure |
||
character(kind=CK,len=*), | intent(in) | :: | path | the path to the variable |
||
character(kind=CK,len=*), | intent(in) | :: | value | the value to add |
||
logical(kind=LK), | intent(out), | optional | :: | found | if the variable was found |
|
logical(kind=LK), | intent(out), | optional | :: | was_created | if the variable had to be created |
Wrapper to json_add_integer_by_path for adding an integer vector by path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | me | the JSON structure |
||
character(kind=CK,len=*), | intent(in) | :: | path | the path to the variable |
||
integer(kind=IK), | intent(in), | dimension(:) | :: | value | the vector to add |
|
logical(kind=LK), | intent(out), | optional | :: | found | if the variable was found |
|
logical(kind=LK), | intent(out), | optional | :: | was_created | if the variable had to be created |
Wrapper to json_add_double_by_path for adding a double vector by path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | me | the JSON structure |
||
character(kind=CK,len=*), | intent(in) | :: | path | the path to the variable |
||
real(kind=RK), | intent(in), | dimension(:) | :: | value | the vector to add |
|
logical(kind=LK), | intent(out), | optional | :: | found | if the variable was found |
|
logical(kind=LK), | intent(out), | optional | :: | was_created | if the variable had to be created |
Wrapper to json_add_logical_by_path for adding a logical vector by path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | me | the JSON structure |
||
character(kind=CK,len=*), | intent(in) | :: | path | the path to the variable |
||
logical(kind=LK), | intent(in), | dimension(:) | :: | value | the vector to add |
|
logical(kind=LK), | intent(out), | optional | :: | found | if the variable was found |
|
logical(kind=LK), | intent(out), | optional | :: | was_created | if the variable had to be created |
Wrapper to json_add_string_by_path for adding a string vector by path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | me | the JSON structure |
||
character(kind=CK,len=*), | intent(in) | :: | path | the path to the variable |
||
character(kind=CK,len=*), | intent(in), | dimension(:) | :: | value | the vector to add |
|
logical(kind=LK), | intent(out), | optional | :: | found | if the variable was found |
|
logical(kind=LK), | intent(out), | optional | :: | was_created | if the variable had to be created |
|
integer(kind=IK), | intent(in), | optional | dimension(:) | :: | ilen | the string lengths of each
element in |
Generate a warning message if there was an error parsing a JSON file or string.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
integer(kind=IK), | intent(in) | :: | iunit | file unit number |
||
character(kind=CK,len=*), | intent(in) | :: | str | string with JSON data |
check for error and get error message
Retrieve error code from the json_core.
This should be called after parse
to check for errors.
If an error is thrown, before using the class again, json_initialize
should be called to clean up before it is used again.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
logical(kind=LK), | intent(out) | :: | status_ok | true if there were no errors |
||
character(kind=CK,len=:), | intent(out), | allocatable | :: | error_msg | the error message (if there were errors) |
clear exceptions
Clear exceptions in the json_core.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json |
clone a JSON structure (deep copy)
Create a deep copy of a json_value linked-list structure.
Type | Intent | Optional | 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) |
count the number of children
Count the number of children.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | p |
number of children
Create a json_value linked list using the path to the variables. Optionally return a pointer to the variable.
(This will create a null
variable)
Returns the json_value pointer given the path string, If necessary, by creating the variables as needed.
Type | Intent | Optional | 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 |
||
type(json_value), | intent(out), | optional | pointer | :: | p | pointer to the variable
specify by |
logical(kind=LK), | intent(out), | optional | :: | found | true if there were no errors (variable found or created) |
|
logical(kind=LK), | intent(out), | optional | :: | was_created | true if it was actually created (as opposed to already being there) |
Allocate a json_value pointer and make it an array variable. The pointer should not already be allocated.
type(json_core) :: json type(json_value),pointer :: p call json%create_array(p,'arrayname')
Allocate a json_value pointer and make it an array variable. The pointer should not already be allocated.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | name |
Allocate a json_value pointer and make it a double variable. The pointer should not already be allocated.
type(json_core) :: json type(json_value),pointer :: p call json%create_double(p,'value',1.0_RK)
Allocate a json_value pointer and make it a real(RK) variable. The pointer should not already be allocated.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
real(kind=RK), | intent(in) | :: | val | |||
character(kind=CK,len=*), | intent(in) | :: | name |
Allocate a json_value pointer and make it an integer variable. The pointer should not already be allocated.
type(json_core) :: json type(json_value),pointer :: p call json%create_integer(p,42,'value')
Allocate a json_value pointer and make it an integer(IK) variable. The pointer should not already be allocated.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
integer(kind=IK), | intent(in) | :: | val | |||
character(kind=CK,len=*), | intent(in) | :: | name |
Allocate a json_value pointer and make it a logical variable. The pointer should not already be allocated.
type(json_core) :: json type(json_value),pointer :: p call json%create_logical(p,'value',.true.)
Allocate a json_value pointer and make it a logical(LK) variable. The pointer should not already be allocated.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
logical(kind=LK), | intent(in) | :: | val | variable value |
||
character(kind=CK,len=*), | intent(in) | :: | name | variable name |
Allocate a json_value pointer and make it a null variable. The pointer should not already be allocated.
type(json_core) :: json type(json_value),pointer :: p call json%create_null(p,'value')
Allocate a json_value pointer and make it a null variable. The pointer should not already be allocated.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | name |
Allocate a json_value pointer and make it an object variable. The pointer should not already be allocated.
type(json_core) :: json type(json_value),pointer :: p call json%create_object(p,'objectname')
The name is not significant for the root structure or an array element. In those cases, an empty string can be used.
Allocate a json_value pointer and make it an object variable. The pointer should not already be allocated.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | name |
Allocate a json_value pointer and make it a string variable. The pointer should not already be allocated.
type(json_core) :: json type(json_value),pointer :: p call json%create_string(p,'value','foobar')
Allocate a json_value pointer and make it a string variable. The pointer should not already be allocated.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | val | |||
character(kind=CK,len=*), | intent(in) | :: | name |
Destructor routine for a json_value pointer. This must be called explicitly if it is no longer needed, before it goes out of scope. Otherwise, a memory leak will result.
Destroy the json_value pointer before the variable goes out of scope:
subroutine example1() type(json_core) :: json type(json_value),pointer :: p call json%create_object(p,'') call json%add(p,'year',2015) call json%print(p) call json%destroy(p) end subroutine example1
Note: it should NOT be called for a json_value pointer than has already been added to another json_value structure, since doing so may render the other structure invalid. Consider the following example:
subroutine example2(p) type(json_core) :: json type(json_value),pointer,intent(out) :: p type(json_value),pointer :: q call json%create_object(p,'') call json%add(p,'year',2015) call json%create_object(q,'q') call json%add(q,'val',1) call json%add(p, q) !add q to p structure ! do NOT call json%destroy(q) here, because q is ! now part of the output structure p. p should be destroyed ! somewhere upstream by the caller of this routine. nullify(q) !OK, but not strictly necessary end subroutine example2
Destroy a json_value linked-list structure.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | variable to destroy |
||
logical(kind=LK), | intent(in), | optional | :: | destroy_next | if true, then |
Destructor for the json_core type.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(out) | :: | me |
Destructor for the json_core type.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(out) | :: | me |
check for error
Logical function to indicate if an exception has been thrown in a json_core.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(in) | :: | json |
will be true if an exception has been thrown.
Get data from a json_value linked list.
There are two versions (e.g. json_get_integer and json_get_integer_by_path). The first one gets the value from the json_value passed into the routine, while the second one gets the value from the json_value found by parsing the path. The path version is split up into unicode and non-unicode versions.
Returns the json_value pointer given the path string.
Type | Intent | Optional | 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 |
||
type(json_value), | intent(out), | pointer | :: | p | pointer to the variable
specify by |
|
logical(kind=LK), | intent(out), | optional | :: | found | true if it was found |
Get an integer value from a json_value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
integer(kind=IK), | intent(out) | :: | value |
Get an integer value from a json_value, given the path string.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
character(kind=CK,len=*), | intent(in) | :: | path | |||
integer(kind=IK), | intent(out) | :: | value | |||
logical(kind=LK), | intent(out), | optional | :: | found |
Get an integer vector from a json_value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | me | |||
integer(kind=IK), | intent(out), | dimension(:), allocatable | :: | vec |
Get an integer vector from a json_value, given the path string.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
character(kind=CK,len=*), | intent(in) | :: | path | |||
integer(kind=IK), | intent(out), | dimension(:), allocatable | :: | vec | ||
logical(kind=LK), | intent(out), | optional | :: | found |
Get a double value from a json_value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | me | |||
real(kind=RK), | intent(out) | :: | value |
Get a double value from a json_value, given the path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | me | |||
character(kind=CK,len=*), | intent(in) | :: | path | |||
real(kind=RK), | intent(out) | :: | value | |||
logical(kind=LK), | intent(out), | optional | :: | found |
Get a double vector from a json_value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | me | |||
real(kind=RK), | intent(out), | dimension(:), allocatable | :: | vec |
Get a double vector from a json_value, given the path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
character(kind=CK,len=*), | intent(in) | :: | path | |||
real(kind=RK), | intent(out), | dimension(:), allocatable | :: | vec | ||
logical(kind=LK), | intent(out), | optional | :: | found |
Get a logical value from a json_value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
logical(kind=LK), | intent(out) | :: | value |
Get a logical value from a json_value, given the path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
character(kind=CK,len=*), | intent(in) | :: | path | |||
logical(kind=LK), | intent(out) | :: | value | |||
logical(kind=LK), | intent(out), | optional | :: | found |
Get a logical vector from json_value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
logical(kind=LK), | intent(out), | dimension(:), allocatable | :: | vec |
Get a logical vector from a json_value, given the path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
character(kind=CK,len=*), | intent(in) | :: | path | |||
logical(kind=LK), | intent(out), | dimension(:), allocatable | :: | vec | ||
logical(kind=LK), | intent(out), | optional | :: | found |
Get a character string from a json_value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
character(kind=CK,len=:), | intent(out), | allocatable | :: | value |
Get a character string from a json_value, given the path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
character(kind=CK,len=*), | intent(in) | :: | path | |||
character(kind=CK,len=:), | intent(out), | allocatable | :: | value | ||
logical(kind=LK), | intent(out), | optional | :: | found |
Get a string vector from a json_value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
character(kind=CK,len=*), | intent(out), | dimension(:), allocatable | :: | vec |
Get a string vector from a json_value, given the path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
character(kind=CK,len=*), | intent(in) | :: | path | |||
character(kind=CK,len=*), | intent(out), | dimension(:), allocatable | :: | vec | ||
logical(kind=LK), | intent(out), | optional | :: | found |
Get a string vector from a json_value. This is an alternate version of json_get_string_vec. This one returns an allocatable length character (where the string length is the maximum length of any element in the array). It also returns an integer array of the actual sizes of the strings in the JSON structure.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
character(kind=CK,len=:), | intent(out), | dimension(:), allocatable | :: | vec | ||
integer(kind=IK), | intent(out), | dimension(:), allocatable | :: | ilen | the actual length of each character string in the array |
Alternate version of json_get_alloc_string_vec where input is the path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
character(kind=CK,len=*), | intent(in) | :: | path | |||
character(kind=CK,len=:), | intent(out), | dimension(:), allocatable | :: | vec | ||
integer(kind=IK), | intent(out), | dimension(:), allocatable | :: | ilen | the actual length of each character string in the array |
|
logical(kind=LK), | intent(out), | optional | :: | found |
This routine calls the user-supplied json_array_callback_func subroutine for each element in the array.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
procedure(json_array_callback_func) | :: | array_callback |
This routine calls the user-supplied array_callback subroutine for each element in the array (specified by the path).
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
character(kind=CK,len=*), | intent(in) | :: | path | |||
procedure(json_array_callback_func) | :: | array_callback | ||||
logical(kind=LK), | intent(out), | optional | :: | found |
Return a child of a json_value structure.
Returns a child in the object or array given the index.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | p | object or array JSON data |
|
integer(kind=IK), | intent(in) | :: | idx | index of the child (this is a 1-based Fortran style array index). |
||
type(json_value), | pointer | :: | child | pointer to the child |
||
logical(kind=LK), | intent(out), | optional | :: | found | true if the value was found (if not present, an exception will be thrown if it was not found. If present and not found, no exception will be thrown). |
Returns pointer to the first child of the object
(or null()
if it is not associated).
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | p | object or array JSON data |
|
type(json_value), | pointer | :: | child | pointer to the child |
Returns a child in the object or array given the name string.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | p | ||
character(kind=CK,len=*), | intent(in) | :: | name | the name of a child of |
||
type(json_value), | pointer | :: | child | pointer to the child |
||
logical(kind=LK), | intent(out), | optional | :: | found | true if the value was found (if not present, an exception will be thrown if it was not found. If present and not found, no exception will be thrown). |
Rewind the file to the beginning of the current line, and return this line. The file is assumed to be opened. This is the SEQUENTIAL version (see also get_current_line_from_file_stream).
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
integer(kind=IK), | intent(in) | :: | iunit | file unit number |
||
character(kind=CK,len=:), | intent(out), | allocatable | :: | line | current line |
Rewind the file to the beginning of the current line, and return this line. The file is assumed to be opened. This is the STREAM version (see also get_current_line_from_file_sequential).
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
integer(kind=IK), | intent(in) | :: | iunit | file unit number |
||
character(kind=CK,len=:), | intent(out), | allocatable | :: | line | current line |
get pointer to json_value next
Returns a pointer to the next of a json_value.
If there is no next, then a null()
pointer is returned.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | p | JSON object |
|
type(json_value), | intent(out), | pointer | :: | next | pointer to |
get pointer to json_value parent
Returns a pointer to the parent of a json_value.
If there is no parent, then a null()
pointer is returned.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | p | JSON object |
|
type(json_value), | intent(out), | pointer | :: | parent | pointer to |
get the path to a JSON variable in a structure:
Returns the path to a JSON object that is part of a linked list structure.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | p | a JSON linked list object |
|
character(kind=CK,len=:), | intent(out), | allocatable | :: | path | path to the variable |
|
logical(kind=LK), | intent(out), | optional | :: | found | true if there were no problems |
|
logical(kind=LK), | intent(in), | optional | :: | use_alt_array_tokens | if true, then '()' are used for array elements otherwise, '[]' are used [default] |
|
character(kind=CK,len=1), | intent(in), | optional | :: | path_sep | character to use for path separator
(otherwise use |
get pointer to json_value previous
Returns a pointer to the previous of a json_value.
If there is no previous, then a null()
pointer is returned.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | p | JSON object |
|
type(json_value), | intent(out), | pointer | :: | previous | pointer to |
get pointer to json_value tail
Returns a pointer to the tail of a json_value
(the last child of an array of object).
If there is no tail, then a null()
pointer is returned.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | p | JSON object |
|
type(json_value), | intent(out), | pointer | :: | tail | pointer to |
get info about a json_value
Returns information about a json_value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
integer(kind=IK), | intent(out), | optional | :: | var_type | variable type |
|
integer(kind=IK), | intent(out), | optional | :: | n_children | number of children |
|
character(kind=CK,len=:), | intent(out), | optional | allocatable | :: | name | variable name |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | p | a JSON linked list |
|
character(kind=CK,len=*), | intent(in) | :: | path | path to the variable |
||
logical(kind=LK), | intent(out), | optional | :: | found | true if it was found |
|
integer(kind=IK), | intent(out), | optional | :: | var_type | variable type |
|
integer(kind=IK), | intent(out), | optional | :: | n_children | number of children |
|
character(kind=CK,len=:), | intent(out), | optional | allocatable | :: | name | variable name |
to initialize some parsing parameters
Initialize the json_core instance.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | me | |||
logical(kind=LK), | intent(in), | optional | :: | verbose | mainly useful for debugging (default is false) |
|
logical(kind=LK), | intent(in), | optional | :: | compact_reals | to compact the real number strings for output (default is true) |
|
logical(kind=LK), | intent(in), | optional | :: | print_signs | always print numeric sign (default is false) |
|
character(kind=CDK,len=*), | intent(in), | optional | :: | real_format | Real number format: 'E' [default], '*', 'G', 'EN', or 'ES' |
|
integer(kind=IK), | intent(in), | optional | :: | spaces_per_tab | number of spaces per tab for indenting (default is 2) |
|
logical(kind=LK), | intent(in), | optional | :: | strict_type_checking | if true, no integer, double, or logical type
conversions are done for the |
|
logical(kind=LK), | intent(in), | optional | :: | trailing_spaces_significant | for name and path comparisons, is trailing space to be considered significant. (default is false) |
|
logical(kind=LK), | intent(in), | optional | :: | case_sensitive_keys | for name and path comparisons, are they case sensitive. (default is true) |
|
logical(kind=LK), | intent(in), | optional | :: | no_whitespace | if true, printing the JSON structure is done without adding any non-significant spaces or linebreaks (default is false) |
|
logical(kind=LK), | intent(in), | optional | :: | unescape_strings | If false, then the raw escaped string is returned from json_get_string and similar routines. If true [default], then the string is returned unescaped. |
|
character(kind=CK,len=1), | intent(in), | optional | :: | comment_char | If present, this character is used
to denote comments in the JSON file,
which will be ignored if present.
Example: |
|
integer(kind=IK), | intent(in), | optional | :: | path_mode | How the path strings are interpreted in the
|
|
character(kind=CK,len=1), | intent(in), | optional | :: | path_separator | The |
|
logical(kind=LK), | intent(in), | optional | :: | compress_vectors | If true, then arrays of integers,
nulls, doubles, and logicals are
printed all on one line.
[Note: |
insert a new element after an existing one, updating the JSON structure accordingly
Inserts element
after p
, and updates the JSON structure accordingly.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | a value from a JSON structure (presumably, this is a child of an object or array). |
||
type(json_value), | pointer | :: | element | the element to insert after |
Inserts element
after the idx
-th child of p
,
and updates the JSON structure accordingly. This is just
a wrapper for json_value_insert_after.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | a JSON object or array. |
||
integer(kind=IK), | intent(in) | :: | idx | the index of the child of |
||
type(json_value), | pointer | :: | element | the element to insert |
Check if a json_value is a descendant of another.
Returns True if p2
is a descendant of p1
(i.e, a child, or a child of child, etc.)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p1 | |||
type(json_value), | pointer | :: | p2 |
Add an double value to a json_value, given the path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | me | the JSON structure |
||
character(kind=CK,len=*), | intent(in) | :: | path | the path to the variable |
||
real(kind=RK), | intent(in) | :: | value | the value to add |
||
logical(kind=LK), | intent(out), | optional | :: | found | if the variable was found |
|
logical(kind=LK), | intent(out), | optional | :: | was_created | if the variable had to be created |
Wrapper to json_add_double_by_path for adding a double vector by path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | me | the JSON structure |
||
character(kind=CK,len=*), | intent(in) | :: | path | the path to the variable |
||
real(kind=RK), | intent(in), | dimension(:) | :: | value | the vector to add |
|
logical(kind=LK), | intent(out), | optional | :: | found | if the variable was found |
|
logical(kind=LK), | intent(out), | optional | :: | was_created | if the variable had to be created |
Add an integer value to a json_value, given the path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | me | the JSON structure |
||
character(kind=CK,len=*), | intent(in) | :: | path | the path to the variable |
||
integer(kind=IK), | intent(in) | :: | value | the value to add |
||
logical(kind=LK), | intent(out), | optional | :: | found | if the variable was found |
|
logical(kind=LK), | intent(out), | optional | :: | was_created | if the variable had to be created |
Wrapper to json_add_integer_by_path for adding an integer vector by path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | me | the JSON structure |
||
character(kind=CK,len=*), | intent(in) | :: | path | the path to the variable |
||
integer(kind=IK), | intent(in), | dimension(:) | :: | value | the vector to add |
|
logical(kind=LK), | intent(out), | optional | :: | found | if the variable was found |
|
logical(kind=LK), | intent(out), | optional | :: | was_created | if the variable had to be created |
Add a logical value to a json_value, given the path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | me | the JSON structure |
||
character(kind=CK,len=*), | intent(in) | :: | path | the path to the variable |
||
logical(kind=LK), | intent(in) | :: | value | the value to add |
||
logical(kind=LK), | intent(out), | optional | :: | found | if the variable was found |
|
logical(kind=LK), | intent(out), | optional | :: | was_created | if the variable had to be created |
Wrapper to json_add_logical_by_path for adding a logical vector by path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | me | the JSON structure |
||
character(kind=CK,len=*), | intent(in) | :: | path | the path to the variable |
||
logical(kind=LK), | intent(in), | dimension(:) | :: | value | the vector to add |
|
logical(kind=LK), | intent(out), | optional | :: | found | if the variable was found |
|
logical(kind=LK), | intent(out), | optional | :: | was_created | if the variable had to be created |
Add a new member (json_value
pointer) to a JSON structure, given the path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | me | the JSON structure |
||
character(kind=CK,len=*), | intent(in) | :: | path | the path to the variable |
||
type(json_value), | intent(in), | pointer | :: | p | the value to add |
|
logical(kind=LK), | intent(out), | optional | :: | found | if the variable was found |
|
logical(kind=LK), | intent(out), | optional | :: | was_created | if the variable had to be created |
Add a string value to a json_value, given the path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | me | the JSON structure |
||
character(kind=CK,len=*), | intent(in) | :: | path | the path to the variable |
||
character(kind=CK,len=*), | intent(in) | :: | value | the value to add |
||
logical(kind=LK), | intent(out), | optional | :: | found | if the variable was found |
|
logical(kind=LK), | intent(out), | optional | :: | was_created | if the variable had to be created |
Wrapper to json_add_string_by_path for adding a string vector by path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | me | the JSON structure |
||
character(kind=CK,len=*), | intent(in) | :: | path | the path to the variable |
||
character(kind=CK,len=*), | intent(in), | dimension(:) | :: | value | the vector to add |
|
logical(kind=LK), | intent(out), | optional | :: | found | if the variable was found |
|
logical(kind=LK), | intent(out), | optional | :: | was_created | if the variable had to be created |
|
integer(kind=IK), | intent(in), | optional | dimension(:) | :: | ilen | the string lengths of each
element in |
Returns the json_value pointer given the path string, If necessary, by creating the variables as needed.
Type | Intent | Optional | 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 |
||
type(json_value), | intent(out), | optional | pointer | :: | p | pointer to the variable
specify by |
logical(kind=LK), | intent(out), | optional | :: | found | true if there were no errors (variable found or created) |
|
logical(kind=LK), | intent(out), | optional | :: | was_created | true if it was actually created (as opposed to already being there) |
Get a string vector from a json_value. This is an alternate version of json_get_string_vec. This one returns an allocatable length character (where the string length is the maximum length of any element in the array). It also returns an integer array of the actual sizes of the strings in the JSON structure.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
character(kind=CK,len=:), | intent(out), | dimension(:), allocatable | :: | vec | ||
integer(kind=IK), | intent(out), | dimension(:), allocatable | :: | ilen | the actual length of each character string in the array |
Alternate version of json_get_alloc_string_vec where input is the path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
character(kind=CK,len=*), | intent(in) | :: | path | |||
character(kind=CK,len=:), | intent(out), | dimension(:), allocatable | :: | vec | ||
integer(kind=IK), | intent(out), | dimension(:), allocatable | :: | ilen | the actual length of each character string in the array |
|
logical(kind=LK), | intent(out), | optional | :: | found |
This routine calls the user-supplied json_array_callback_func subroutine for each element in the array.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
procedure(json_array_callback_func) | :: | array_callback |
This routine calls the user-supplied array_callback subroutine for each element in the array (specified by the path).
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
character(kind=CK,len=*), | intent(in) | :: | path | |||
procedure(json_array_callback_func) | :: | array_callback | ||||
logical(kind=LK), | intent(out), | optional | :: | found |
Returns the json_value pointer given the path string.
Type | Intent | Optional | 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 |
||
type(json_value), | intent(out), | pointer | :: | p | pointer to the variable
specify by |
|
logical(kind=LK), | intent(out), | optional | :: | found | true if it was found |
Returns the json_value pointer given the path string.
Type | Intent | Optional | 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 |
||
type(json_value), | intent(out), | pointer | :: | p | pointer to the variable
specify by |
|
logical(kind=LK), | intent(out), | optional | :: | found | true if it was found |
|
logical(kind=LK), | intent(in), | optional | :: | create_it | if a variable is not present
in the path, then it is created.
the leaf node is returned as
a |
|
logical(kind=LK), | intent(out), | optional | :: | was_created | if |
Returns the json_value pointer given the path string, using the "JSON Pointer" path specification defined by RFC 6901.
Type | Intent | Optional | 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 |
|
logical(kind=LK), | intent(out), | optional | :: | found | true if it was found |
Get a double value from a json_value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | me | |||
real(kind=RK), | intent(out) | :: | value |
Get a double value from a json_value, given the path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | me | |||
character(kind=CK,len=*), | intent(in) | :: | path | |||
real(kind=RK), | intent(out) | :: | value | |||
logical(kind=LK), | intent(out), | optional | :: | found |
Get a double vector from a json_value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | me | |||
real(kind=RK), | intent(out), | dimension(:), allocatable | :: | vec |
Get a double vector from a json_value, given the path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
character(kind=CK,len=*), | intent(in) | :: | path | |||
real(kind=RK), | intent(out), | dimension(:), allocatable | :: | vec | ||
logical(kind=LK), | intent(out), | optional | :: | found |
Get an integer value from a json_value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
integer(kind=IK), | intent(out) | :: | value |
Get an integer value from a json_value, given the path string.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
character(kind=CK,len=*), | intent(in) | :: | path | |||
integer(kind=IK), | intent(out) | :: | value | |||
logical(kind=LK), | intent(out), | optional | :: | found |
Get an integer vector from a json_value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | me | |||
integer(kind=IK), | intent(out), | dimension(:), allocatable | :: | vec |
Get an integer vector from a json_value, given the path string.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
character(kind=CK,len=*), | intent(in) | :: | path | |||
integer(kind=IK), | intent(out), | dimension(:), allocatable | :: | vec | ||
logical(kind=LK), | intent(out), | optional | :: | found |
Get a logical value from a json_value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
logical(kind=LK), | intent(out) | :: | value |
Get a logical value from a json_value, given the path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
character(kind=CK,len=*), | intent(in) | :: | path | |||
logical(kind=LK), | intent(out) | :: | value | |||
logical(kind=LK), | intent(out), | optional | :: | found |
Get a logical vector from json_value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
logical(kind=LK), | intent(out), | dimension(:), allocatable | :: | vec |
Get a logical vector from a json_value, given the path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
character(kind=CK,len=*), | intent(in) | :: | path | |||
logical(kind=LK), | intent(out), | dimension(:), allocatable | :: | vec | ||
logical(kind=LK), | intent(out), | optional | :: | found |
Returns the path to a JSON object that is part of a linked list structure.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | p | a JSON linked list object |
|
character(kind=CK,len=:), | intent(out), | allocatable | :: | path | path to the variable |
|
logical(kind=LK), | intent(out), | optional | :: | found | true if there were no problems |
|
logical(kind=LK), | intent(in), | optional | :: | use_alt_array_tokens | if true, then '()' are used for array elements otherwise, '[]' are used [default] |
|
character(kind=CK,len=1), | intent(in), | optional | :: | path_sep | character to use for path separator
(otherwise use |
Get a character string from a json_value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
character(kind=CK,len=:), | intent(out), | allocatable | :: | value |
Get a character string from a json_value, given the path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
character(kind=CK,len=*), | intent(in) | :: | path | |||
character(kind=CK,len=:), | intent(out), | allocatable | :: | value | ||
logical(kind=LK), | intent(out), | optional | :: | found |
Get a string vector from a json_value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
character(kind=CK,len=*), | intent(out), | dimension(:), allocatable | :: | vec |
Get a string vector from a json_value, given the path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | me | ||
character(kind=CK,len=*), | intent(in) | :: | path | |||
character(kind=CK,len=*), | intent(out), | dimension(:), allocatable | :: | vec | ||
logical(kind=LK), | intent(out), | optional | :: | found |
Returns information about a json_value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
integer(kind=IK), | intent(out), | optional | :: | var_type | variable type |
|
integer(kind=IK), | intent(out), | optional | :: | n_children | number of children |
|
character(kind=CK,len=:), | intent(out), | optional | allocatable | :: | name | variable name |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | p | a JSON linked list |
|
character(kind=CK,len=*), | intent(in) | :: | path | path to the variable |
||
logical(kind=LK), | intent(out), | optional | :: | found | true if it was found |
|
integer(kind=IK), | intent(out), | optional | :: | var_type | variable type |
|
integer(kind=IK), | intent(out), | optional | :: | n_children | number of children |
|
character(kind=CK,len=:), | intent(out), | optional | allocatable | :: | name | variable name |
Alternate version of json_info that returns matrix information about a json_value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | a JSON linked list |
||
logical(kind=LK), | intent(out) | :: | is_matrix | true if it is a valid matrix |
||
integer(kind=IK), | intent(out), | optional | :: | var_type | variable type of data in the matrix (if all elements have the same type) |
|
integer(kind=IK), | intent(out), | optional | :: | n_sets | number of data sets (i.e., matrix rows if using row-major order) |
|
integer(kind=IK), | intent(out), | optional | :: | set_size | size of each data set (i.e., matrix cols if using row-major order) |
|
character(kind=CK,len=:), | intent(out), | optional | allocatable | :: | name | variable name |
Returns matrix information about a json_value, given the path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | a JSON linked list |
||
character(kind=CK,len=*), | intent(in) | :: | path | path to the variable |
||
logical(kind=LK), | intent(out) | :: | is_matrix | true if it is a valid matrix |
||
logical(kind=LK), | intent(out), | optional | :: | found | true if it was found |
|
integer(kind=IK), | intent(out), | optional | :: | var_type | variable type of data in the matrix (if all elements have the same type) |
|
integer(kind=IK), | intent(out), | optional | :: | n_sets | number of data sets (i.e., matrix rows if using row-major order) |
|
integer(kind=IK), | intent(out), | optional | :: | set_size | size of each data set (i.e., matrix cols if using row-major order) |
|
character(kind=CK,len=:), | intent(out), | optional | allocatable | :: | name | variable name |
Parse the JSON file and populate the json_value tree.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
character(kind=CDK,len=*), | intent(in) | :: | file | JSON file name |
||
type(json_value), | pointer | :: | p | output structure |
||
integer(kind=IK), | intent(in), | optional | :: | unit | file unit number (/= 0) |
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 |
Print the json_value structure to a file.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | p | ||
integer(kind=IK), | intent(in) | :: | iunit | the file unit (the file must already have been opened, can't be -1). |
Print the json_value structure to a file.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | p | ||
character(kind=CDK,len=*), | intent(in) | :: | filename | the filename to print to (should not already be open) |
Returns information about character strings returned from a json_value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
integer(kind=IK), | intent(out), | optional | dimension(:), allocatable | :: | ilen | if |
integer(kind=IK), | intent(out), | optional | :: | max_str_len | The maximum length required to
hold the string representation returned
by a call to a |
|
logical(kind=LK), | intent(out), | optional | :: | found | true if there were no errors. if not present, an error will throw an exception |
Throw an exception in the json_core. This routine sets the error flag, and prevents any subsequent routine from doing anything, until json_clear_exceptions is called.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
character(kind=CK,len=*), | intent(in) | :: | msg | the error message |
Given the path string, if the variable is present, and is a scalar, then update its value. If it is not present, then create it and set its value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | path | |||
real(kind=RK), | intent(in) | :: | val | |||
logical(kind=LK), | intent(out) | :: | found |
Given the path string, if the variable is present, and is a scalar, then update its value. If it is not present, then create it and set its value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | path | |||
integer(kind=IK), | intent(in) | :: | val | |||
logical(kind=LK), | intent(out) | :: | found |
Given the path string, if the variable is present, and is a scalar, then update its value. If it is not present, then create it and set its value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | path | |||
logical(kind=LK), | intent(in) | :: | val | |||
logical(kind=LK), | intent(out) | :: | found |
Given the path string, if the variable is present, and is a scalar, then update its value. If it is not present, then create it and set its value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | path | |||
character(kind=CK,len=*), | intent(in) | :: | val | |||
logical(kind=LK), | intent(out) | :: | found |
Add a real value child to the json_value variable
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | name | variable name |
||
real(kind=RK), | intent(in) | :: | val | real value |
Add a real vector to the structure.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | name | |||
real(kind=RK), | intent(in), | dimension(:) | :: | val |
Add an integer value child to the json_value variable
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | name | |||
integer(kind=IK), | intent(in) | :: | val |
Add an integer vector to the structure.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | name | name of the variable |
||
integer(kind=IK), | intent(in), | dimension(:) | :: | val | value |
Add a logical value child to the json_value variable
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | name | name of the variable |
||
logical(kind=LK), | intent(in) | :: | val | value |
Add a logical vector to the structure.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | name | name of the vector |
||
logical(kind=LK), | intent(in), | dimension(:) | :: | val | value |
Adds member
as a child of p
.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
type(json_value), | pointer | :: | member | the child member
to add to |
Add a NULL value child to the json_value variable
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | name |
Add a character string child to the json_value variable.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | name | name of the variable |
||
character(kind=CK,len=*), | intent(in) | :: | val | value |
Add an array of character strings to the structure.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | name | variable name |
||
character(kind=CK,len=*), | intent(in), | dimension(:) | :: | val | array of strings |
|
logical(kind=LK), | intent(in), | optional | :: | trim_str | if TRIM() should be called for each element |
|
logical(kind=LK), | intent(in), | optional | :: | adjustl_str | if ADJUSTL() should be called for each element |
Allocate a json_value pointer and make it an array variable. The pointer should not already be allocated.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | name |
Allocate a json_value pointer and make it a real(RK) variable. The pointer should not already be allocated.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
real(kind=RK), | intent(in) | :: | val | |||
character(kind=CK,len=*), | intent(in) | :: | name |
Allocate a json_value pointer and make it an integer(IK) variable. The pointer should not already be allocated.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
integer(kind=IK), | intent(in) | :: | val | |||
character(kind=CK,len=*), | intent(in) | :: | name |
Allocate a json_value pointer and make it a logical(LK) variable. The pointer should not already be allocated.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
logical(kind=LK), | intent(in) | :: | val | variable value |
||
character(kind=CK,len=*), | intent(in) | :: | name | variable name |
Allocate a json_value pointer and make it a null variable. The pointer should not already be allocated.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | name |
Allocate a json_value pointer and make it an object variable. The pointer should not already be allocated.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | name |
Allocate a json_value pointer and make it a string variable. The pointer should not already be allocated.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | val | |||
character(kind=CK,len=*), | intent(in) | :: | name |
Destroy a json_value linked-list structure.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | variable to destroy |
||
logical(kind=LK), | intent(in), | optional | :: | destroy_next | if true, then |
Returns pointer to the first child of the object
(or null()
if it is not associated).
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | p | object or array JSON data |
|
type(json_value), | pointer | :: | child | pointer to the child |
Returns a child in the object or array given the index.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | p | object or array JSON data |
|
integer(kind=IK), | intent(in) | :: | idx | index of the child (this is a 1-based Fortran style array index). |
||
type(json_value), | pointer | :: | child | pointer to the child |
||
logical(kind=LK), | intent(out), | optional | :: | found | true if the value was found (if not present, an exception will be thrown if it was not found. If present and not found, no exception will be thrown). |
Returns a child in the object or array given the name string.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | p | ||
character(kind=CK,len=*), | intent(in) | :: | name | the name of a child of |
||
type(json_value), | pointer | :: | child | pointer to the child |
||
logical(kind=LK), | intent(out), | optional | :: | found | true if the value was found (if not present, an exception will be thrown if it was not found. If present and not found, no exception will be thrown). |
Inserts element
after p
, and updates the JSON structure accordingly.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | a value from a JSON structure (presumably, this is a child of an object or array). |
||
type(json_value), | pointer | :: | element | the element to insert after |
Inserts element
after the idx
-th child of p
,
and updates the JSON structure accordingly. This is just
a wrapper for json_value_insert_after.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | a JSON object or array. |
||
integer(kind=IK), | intent(in) | :: | idx | the index of the child of |
||
type(json_value), | pointer | :: | element | the element to insert |
Print the JSON structure to a string or a file.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | p | ||
integer(kind=IK), | intent(in) | :: | iunit | file unit to write to (6=console) |
||
character(kind=CK,len=:), | intent(inout), | allocatable | :: | str | if iunit==unit2str (-1) then the structure is printed to this string rather than a file. This mode is used by json_value_to_string. |
|
integer(kind=IK), | intent(in), | optional | :: | indent | indention level |
|
logical(kind=LK), | intent(in), | optional | :: | need_comma | if it needs a comma after it |
|
logical(kind=LK), | intent(in), | optional | :: | colon | if the colon was just written |
|
logical(kind=LK), | intent(in), | optional | :: | is_array_element | if this is an array element |
|
logical(kind=LK), | intent(in), | optional | :: | is_compressed_vector | if True, this is an element from an array being printed on one line [default is False] |
Given the path string, remove the variable from the json_value structure, if it exists.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | name |
Rename a json_value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | p | ||
character(kind=CK,len=*), | intent(in) | :: | name | new variable name |
get matrix info about a json_value
Alternate version of json_info that returns matrix information about a json_value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | a JSON linked list |
||
logical(kind=LK), | intent(out) | :: | is_matrix | true if it is a valid matrix |
||
integer(kind=IK), | intent(out), | optional | :: | var_type | variable type of data in the matrix (if all elements have the same type) |
|
integer(kind=IK), | intent(out), | optional | :: | n_sets | number of data sets (i.e., matrix rows if using row-major order) |
|
integer(kind=IK), | intent(out), | optional | :: | set_size | size of each data set (i.e., matrix cols if using row-major order) |
|
character(kind=CK,len=:), | intent(out), | optional | allocatable | :: | name | variable name |
Returns matrix information about a json_value, given the path.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | a JSON linked list |
||
character(kind=CK,len=*), | intent(in) | :: | path | path to the variable |
||
logical(kind=LK), | intent(out) | :: | is_matrix | true if it is a valid matrix |
||
logical(kind=LK), | intent(out), | optional | :: | found | true if it was found |
|
integer(kind=IK), | intent(out), | optional | :: | var_type | variable type of data in the matrix (if all elements have the same type) |
|
integer(kind=IK), | intent(out), | optional | :: | n_sets | number of data sets (i.e., matrix rows if using row-major order) |
|
integer(kind=IK), | intent(out), | optional | :: | set_size | size of each data set (i.e., matrix cols if using row-major order) |
|
character(kind=CK,len=:), | intent(out), | optional | allocatable | :: | name | variable name |
Returns true if name
is equal to p%name
, using the specified
settings for case sensitivity and trailing whitespace.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in) | :: | p | the json object |
||
character(kind=CK,len=*), | intent(in) | :: | name | the name to check for |
true if the string are lexically equal
Parse the JSON file and populate the json_value tree.
Parse the JSON file and populate the json_value tree.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
character(kind=CDK,len=*), | intent(in) | :: | file | JSON file name |
||
type(json_value), | pointer | :: | p | output structure |
||
integer(kind=IK), | intent(in), | optional | :: | unit | file unit number (/= 0) |
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 |
Core parsing routine.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
integer(kind=IK), | intent(in) | :: | unit | file unit number (if parsing from a file) |
||
character(kind=CK,len=*), | intent(in) | :: | str | JSON string (if parsing from a string) |
||
type(json_value), | pointer | :: | array |
Core parsing routine.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
integer(kind=IK), | intent(in) | :: | unit | file unit number (if parsing from a file) |
||
character(kind=CK,len=*), | intent(in) | :: | str | JSON string (if parsing from a string) |
||
character(kind=CK,len=*), | intent(in) | :: | chars | the string to check for. |
Read a numerical value from the file (or string). The routine will determine if it is an integer or a double, and allocate the type accordingly.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
integer(kind=IK), | intent(in) | :: | unit | file unit number (if parsing from a file) |
||
character(kind=CK,len=*), | intent(in) | :: | str | JSON string (if parsing from a string) |
||
type(json_value), | pointer | :: | value |
Core parsing routine.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
integer(kind=IK), | intent(in) | :: | unit | file unit number (if parsing from a file) |
||
character(kind=CK,len=*), | intent(in) | :: | str | JSON string (if parsing from a string) |
||
type(json_value), | pointer | :: | parent | the parsed object will be added as a child of this |
Parses a string while reading a JSON file.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
integer(kind=IK), | intent(in) | :: | unit | file unit number (if parsing from a file) |
||
character(kind=CK,len=*), | intent(in) | :: | str | JSON string (if parsing from a string) |
||
character(kind=CK,len=:), | intent(out), | allocatable | :: | string |
Core parsing routine.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
integer(kind=IK), | intent(in) | :: | unit | file unit number |
||
character(kind=CK,len=*), | intent(in) | :: | str | string containing JSON data (only used if unit=0) |
||
type(json_value), | pointer | :: | value | JSON data that is extracted |
Get the next character from the file (or string).
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
integer(kind=IK), | intent(in) | :: | unit | file unit number (if parsing from a file) |
||
character(kind=CK,len=*), | intent(in) | :: | str | JSON string (if parsing from a string) – only used if unit=0 |
||
logical(kind=LK), | intent(in), | optional | :: | skip_ws | to ignore whitespace [default False] |
|
logical(kind=LK), | intent(in), | optional | :: | skip_comments | to ignore comment lines [default False] |
|
logical(kind=LK), | intent(out) | :: | eof | true if the end of the file has been reached. |
||
character(kind=CK,len=1), | intent(out) | :: | popped | the popped character returned |
Print the json_value to a file.
type(json_core) :: json type(json_value) :: p !... call json%print(p,'test.json') !this is json_print_2
Print the json_value structure to a file.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | p | ||
integer(kind=IK), | intent(in) | :: | iunit | the file unit (the file must already have been opened, can't be -1). |
Print the json_value structure to a file.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | p | ||
character(kind=CDK,len=*), | intent(in) | :: | filename | the filename to print to (should not already be open) |
simply routine to print error messages
Print any error message, and then clear the exceptions.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
integer, | intent(in), | optional | :: | io_unit |
Print the json_value structure to an allocatable string
Print the json_value structure to an allocatable string.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | p | ||
character(kind=CK,len=:), | intent(out), | allocatable | :: | str | prints structure to this string |
Remove a json_value from a linked-list structure.
Remove a json_value (and all its children) from a linked-list structure, preserving the rest of the structure.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
logical(kind=LK), | intent(in), | optional | :: | destroy | If destroy is not present, it is also destroyed. If destroy is present and true, it is destroyed. If destroy is present and false, it is not destroyed. |
If the child variable is present, then remove it.
Given the path string, remove the variable from the json_value structure, if it exists.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | name |
Rename a json_value variable.
Rename a json_value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | p | ||
character(kind=CK,len=*), | intent(in) | :: | name | new variable name |
Replace a json_value in a linked-list structure.
Replace p1
with p2
in a JSON structure.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p1 | the item to replace |
||
type(json_value), | pointer | :: | p2 | item to take the place of |
||
logical(kind=LK), | intent(in), | optional | :: | destroy | Should |
get string info about a json_value
Returns information about character strings returned from a json_value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
integer(kind=IK), | intent(out), | optional | dimension(:), allocatable | :: | ilen | if |
integer(kind=IK), | intent(out), | optional | :: | max_str_len | The maximum length required to
hold the string representation returned
by a call to a |
|
logical(kind=LK), | intent(out), | optional | :: | found | true if there were no errors. if not present, an error will throw an exception |
Convert a string into a double.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
character(kind=CK,len=*), | intent(in) | :: | str |
Convert a string into an integer.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
character(kind=CK,len=*), | intent(in) | :: | str |
Swap two json_value pointers in a structure (or two different structures).
Swap two elements in a JSON structure. All of the children are carried along as well.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p1 | |||
type(json_value), | pointer | :: | p2 |
Throw an exception.
Throw an exception in the json_core. This routine sets the error flag, and prevents any subsequent routine from doing anything, until json_clear_exceptions is called.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
character(kind=CK,len=*), | intent(in) | :: | msg | the error message |
to traverse all elements of a JSON structure
Traverse a JSON structure. This routine calls the user-specified json_traverse_callback_func for each element of the structure.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | p | ||
procedure(json_traverse_callback_func) | :: | traverse_callback |
These are like the add
methods, except if a variable with the
same path is already present, then its value is simply updated.
Note that currently, these only work for scalar variables.
These routines can also change the variable's type (but an error will be
thrown if the existing variable is not a scalar).
Unlike some routines, the found
output is not optional,
so it doesn't present exceptions from being thrown.
These have been mostly supplanted by the [[add_by_path]] methods, which do a similar thing (and can be used for scalars and vectors, etc.)
Given the path string, if the variable is present, and is a scalar, then update its value. If it is not present, then create it and set its value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | path | |||
logical(kind=LK), | intent(in) | :: | val | |||
logical(kind=LK), | intent(out) | :: | found |
Given the path string, if the variable is present, and is a scalar, then update its value. If it is not present, then create it and set its value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | path | |||
real(kind=RK), | intent(in) | :: | val | |||
logical(kind=LK), | intent(out) | :: | found |
Given the path string, if the variable is present, and is a scalar, then update its value. If it is not present, then create it and set its value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | path | |||
integer(kind=IK), | intent(in) | :: | val | |||
logical(kind=LK), | intent(out) | :: | found |
Given the path string, if the variable is present, and is a scalar, then update its value. If it is not present, then create it and set its value.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p | |||
character(kind=CK,len=*), | intent(in) | :: | path | |||
character(kind=CK,len=*), | intent(in) | :: | val | |||
logical(kind=LK), | intent(out) | :: | found |
Check that a json_value linked list is valid (i.e., is properly constructed). This may be useful if it has been constructed externally.
Validate a json_value linked list by checking to make sure all the pointers are properly associated, arrays and objects have the correct number of children, and the correct data is allocated for the variable types.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | intent(in), | pointer | :: | p | ||
logical(kind=LK), | intent(out) | :: | is_valid | True if the structure is valid. |
||
character(kind=CK,len=:), | intent(out), | allocatable | :: | error_msg | if not valid, this will contain a description of the problem |
type,public :: json_core
private
integer(IK) :: spaces_per_tab = 2 !! number of spaces for indenting
logical(LK) :: compact_real = .true. !! to use the "compact" form of real
!! numbers for output
character(kind=CDK,len=:),allocatable :: real_fmt !! the format string to use
!! for converting real numbers to strings.
!! It can be set in [[json_initialize]],
!! and used in [[json_value_print]]
!! If not set, then `default_real_fmt`
!! is used instead.
logical(LK) :: is_verbose = .false. !! if true, all exceptions are
!! immediately printed to console.
logical(LK) :: exception_thrown = .false. !! The error flag. Will be set to true
!! when an error is thrown in the class.
!! Many of the methods will check this
!! and return immediately if it is true.
character(kind=CK,len=:),allocatable :: err_message !! the error message
integer(IK) :: char_count = 0 !! character position in the current line
integer(IK) :: line_count = 1 !! lines read counter
integer(IK) :: pushed_index = 0 !! used when parsing lines in file
character(kind=CK,len=pushed_char_size) :: pushed_char = CK_'' !! used when parsing
!! lines in file
integer(IK) :: ipos = 1 !! for allocatable strings: next character to read
logical(LK) :: strict_type_checking = .false. !! if true, then no type conversions are done
!! in the `get` routines if the actual variable
!! type is different from the return type (for
!! example, integer to double).
logical(LK) :: trailing_spaces_significant = .false. !! for name and path comparisons, is trailing
!! space to be considered significant.
logical(LK) :: case_sensitive_keys = .true. !! for name and path comparisons, are they
!! case sensitive.
logical(LK) :: no_whitespace = .false. !! when printing a JSON string, don't include
!! non-significant spaces or line breaks.
!! If true, the entire structure will be
!! printed on one line.
logical(LK) :: unescaped_strings = .true. !! If false, then the raw escaped
!! string is returned from [[json_get_string]]
!! and similar routines. If true [default],
!! then the string is returned unescaped.
logical(LK) :: allow_comments = .true. !! if true, any comments will be ignored when
!! parsing a file. The comment token is defined
!! by the `comment_char` string.
character(kind=CK,len=1) :: comment_char = CK_'!' !! comment token when
!! `allow_comments` is true.
!! Examples: '`!`' or '`#`'.
integer(IK) :: path_mode = 1_IK !! How the path strings are interpreted in the
!! `get_by_path` routines:
!!
!! * 1 -- Default mode (see [[json_get_by_path_default]])
!! * 2 -- as RFC 6901 "JSON Pointer" paths
!! (see [[json_get_by_path_rfc6901]])
character(kind=CK,len=1) :: path_separator = dot !! The `path` separator to use
!! in the "default" mode for
!! the paths in the various
!! `get_by_path` routines.
!! Note: if `path_mode/=1`
!! then this is ignored.
logical(LK) :: compress_vectors = .false. !! If true, then arrays of integers,
!! nulls, doubles, & logicals are
!! printed all on one line.
!! [Note: `no_whitespace` will
!! override this option if necessary]
contains
private
!>
! Return a child of a [[json_value]] structure.
generic,public :: get_child => json_value_get_child_by_index, &
json_value_get_child,&
MAYBEWRAP(json_value_get_child_by_name)
procedure,private :: json_value_get_child_by_index
procedure,private :: MAYBEWRAP(json_value_get_child_by_name)
procedure,private :: json_value_get_child
!>
! Add objects to a linked list of [[json_value]]s.
!
!@note It might make more sense to call this `add_child`.
generic,public :: add => json_value_add_member, &
MAYBEWRAP(json_value_add_null), &
MAYBEWRAP(json_value_add_integer), &
MAYBEWRAP(json_value_add_integer_vec), &
MAYBEWRAP(json_value_add_double), &
MAYBEWRAP(json_value_add_double_vec), &
MAYBEWRAP(json_value_add_logical), &
MAYBEWRAP(json_value_add_logical_vec), &
MAYBEWRAP(json_value_add_string), &
MAYBEWRAP(json_value_add_string_vec)
#ifdef USE_UCS4
generic,public :: add => json_value_add_string_name_ascii, &
json_value_add_string_val_ascii, &
json_value_add_string_vec_name_ascii, &
json_value_add_string_vec_val_ascii
#endif
procedure,private :: json_value_add_member
procedure,private :: MAYBEWRAP(json_value_add_integer)
procedure,private :: MAYBEWRAP(json_value_add_null)
procedure,private :: MAYBEWRAP(json_value_add_integer_vec)
procedure,private :: MAYBEWRAP(json_value_add_double)
procedure,private :: MAYBEWRAP(json_value_add_double_vec)
procedure,private :: MAYBEWRAP(json_value_add_logical)
procedure,private :: MAYBEWRAP(json_value_add_logical_vec)
procedure,private :: MAYBEWRAP(json_value_add_string)
procedure,private :: MAYBEWRAP(json_value_add_string_vec)
#ifdef USE_UCS4
procedure,private :: json_value_add_string_name_ascii
procedure,private :: json_value_add_string_val_ascii
procedure,private :: json_value_add_string_vec_name_ascii
procedure,private :: json_value_add_string_vec_val_ascii
#endif
!>
! These are like the `add` methods, except if a variable with the
! same path is already present, then its value is simply updated.
! Note that currently, these only work for scalar variables.
! These routines can also change the variable's type (but an error will be
! thrown if the existing variable is not a scalar).
!
!### See also
! * [[add_by_path]] - this one can be used to change
! arrays and objects to scalars if so desired.
!
!@note Unlike some routines, the `found` output is not optional,
! so it doesn't present exceptions from being thrown.
!
!@note These have been mostly supplanted by the [[add_by_path]]
! methods, which do a similar thing (and can be used for
! scalars and vectors, etc.)
generic,public :: update => MAYBEWRAP(json_update_logical),&
MAYBEWRAP(json_update_double),&
MAYBEWRAP(json_update_integer),&
MAYBEWRAP(json_update_string)
#ifdef USE_UCS4
generic,public :: update => json_update_string_name_ascii,&
json_update_string_val_ascii
#endif
procedure,private :: MAYBEWRAP(json_update_logical)
procedure,private :: MAYBEWRAP(json_update_double)
procedure,private :: MAYBEWRAP(json_update_integer)
procedure,private :: MAYBEWRAP(json_update_string)
#ifdef USE_UCS4
procedure,private :: json_update_string_name_ascii
procedure,private :: json_update_string_val_ascii
#endif
!>
! Add variables to a [[json_value]] linked list
! by specifying their paths.
!
!### Example
!
!````fortran
! use, intrinsic :: iso_fortran_env, only: output_unit, wp=>real64
! use json_module
! type(json_core) :: json
! type(json_value) :: p
! call json%create_object(p,'root') ! create the root
! ! now add some variables using the paths:
! call json%add_by_path(p,'inputs.t', 0.0_wp )
! call json%add_by_path(p,'inputs.x(1)', 100.0_wp)
! call json%add_by_path(p,'inputs.x(2)', 200.0_wp)
! call json%print(p,output_unit) ! now print to console
!````
!
!### Notes
! * This uses [[json_create_by_path]]
!
!### See also
! * The `json_core%update` methods.
! * [[json_create_by_path]]
generic,public :: add_by_path => MAYBEWRAP(json_add_member_by_path),&
MAYBEWRAP(json_add_integer_by_path),&
MAYBEWRAP(json_add_double_by_path),&
MAYBEWRAP(json_add_logical_by_path),&
MAYBEWRAP(json_add_string_by_path),&
MAYBEWRAP(json_add_integer_vec_by_path),&
MAYBEWRAP(json_add_double_vec_by_path),&
MAYBEWRAP(json_add_logical_vec_by_path),&
MAYBEWRAP(json_add_string_vec_by_path)
#ifdef USE_UCS4
generic,public :: add_by_path => json_add_string_by_path_value_ascii,&
json_add_string_by_path_path_ascii,&
json_add_string_vec_by_path_value_ascii,&
json_add_string_vec_by_path_path_ascii
#endif
procedure :: MAYBEWRAP(json_add_member_by_path)
procedure :: MAYBEWRAP(json_add_integer_by_path)
procedure :: MAYBEWRAP(json_add_double_by_path)
procedure :: MAYBEWRAP(json_add_logical_by_path)
procedure :: MAYBEWRAP(json_add_string_by_path)
procedure :: MAYBEWRAP(json_add_integer_vec_by_path)
procedure :: MAYBEWRAP(json_add_double_vec_by_path)
procedure :: MAYBEWRAP(json_add_logical_vec_by_path)
procedure :: MAYBEWRAP(json_add_string_vec_by_path)
#ifdef USE_UCS4
procedure :: json_add_string_by_path_value_ascii
procedure :: json_add_string_by_path_path_ascii
procedure :: json_add_string_vec_by_path_value_ascii
procedure :: json_add_string_vec_by_path_path_ascii
#endif
!>
! Create a [[json_value]] linked list using the
! path to the variables. Optionally return a
! pointer to the variable.
!
! (This will create a `null` variable)
!
!### See also
! * [[add_by_path]]
generic,public :: create => MAYBEWRAP(json_create_by_path)
procedure :: MAYBEWRAP(json_create_by_path)
!>
! Get data from a [[json_value]] linked list.
!
!@note There are two versions (e.g. [[json_get_integer]] and [[json_get_integer_by_path]]).
! The first one gets the value from the [[json_value]] passed into the routine,
! while the second one gets the value from the [[json_value]] found by parsing the
! path. The path version is split up into unicode and non-unicode versions.
generic,public :: get => &
MAYBEWRAP(json_get_by_path), &
json_get_integer, MAYBEWRAP(json_get_integer_by_path), &
json_get_integer_vec, MAYBEWRAP(json_get_integer_vec_by_path), &
json_get_double, MAYBEWRAP(json_get_double_by_path), &
json_get_double_vec, MAYBEWRAP(json_get_double_vec_by_path), &
json_get_logical, MAYBEWRAP(json_get_logical_by_path), &
json_get_logical_vec, MAYBEWRAP(json_get_logical_vec_by_path), &
json_get_string, MAYBEWRAP(json_get_string_by_path), &
json_get_string_vec, MAYBEWRAP(json_get_string_vec_by_path), &
json_get_alloc_string_vec,MAYBEWRAP(json_get_alloc_string_vec_by_path),&
json_get_array, MAYBEWRAP(json_get_array_by_path)
procedure,private :: json_get_integer
procedure,private :: json_get_integer_vec
procedure,private :: json_get_double
procedure,private :: json_get_double_vec
procedure,private :: json_get_logical
procedure,private :: json_get_logical_vec
procedure,private :: json_get_string
procedure,private :: json_get_string_vec
procedure,private :: json_get_alloc_string_vec
procedure,private :: json_get_array
procedure,private :: MAYBEWRAP(json_get_by_path)
procedure,private :: MAYBEWRAP(json_get_integer_by_path)
procedure,private :: MAYBEWRAP(json_get_integer_vec_by_path)
procedure,private :: MAYBEWRAP(json_get_double_by_path)
procedure,private :: MAYBEWRAP(json_get_double_vec_by_path)
procedure,private :: MAYBEWRAP(json_get_logical_by_path)
procedure,private :: MAYBEWRAP(json_get_logical_vec_by_path)
procedure,private :: MAYBEWRAP(json_get_string_by_path)
procedure,private :: MAYBEWRAP(json_get_string_vec_by_path)
procedure,private :: MAYBEWRAP(json_get_array_by_path)
procedure,private :: MAYBEWRAP(json_get_alloc_string_vec_by_path)
procedure,private :: json_get_by_path_default
procedure,private :: json_get_by_path_rfc6901
procedure,public :: print_to_string => json_value_to_string !! Print the [[json_value]]
!! structure to an allocatable
!! string
!>
! Print the [[json_value]] to a file.
!
!### Example
!
!````fortran
! type(json_core) :: json
! type(json_value) :: p
! !...
! call json%print(p,'test.json') !this is [[json_print_2]]
!````
generic,public :: print => json_print_1,json_print_2
procedure :: json_print_1
procedure :: json_print_2
!>
! Destructor routine for a [[json_value]] pointer.
! This must be called explicitly if it is no longer needed,
! before it goes out of scope. Otherwise, a memory leak will result.
!
!### Example
!
! Destroy the [[json_value]] pointer before the variable goes out of scope:
!````fortran
! subroutine example1()
! type(json_core) :: json
! type(json_value),pointer :: p
! call json%create_object(p,'')
! call json%add(p,'year',2015)
! call json%print(p)
! call json%destroy(p)
! end subroutine example1
!````
!
! Note: it should NOT be called for a [[json_value]] pointer than has already been
! added to another [[json_value]] structure, since doing so may render the
! other structure invalid. Consider the following example:
!````fortran
! subroutine example2(p)
! type(json_core) :: json
! type(json_value),pointer,intent(out) :: p
! type(json_value),pointer :: q
! call json%create_object(p,'')
! call json%add(p,'year',2015)
! call json%create_object(q,'q')
! call json%add(q,'val',1)
! call json%add(p, q) !add q to p structure
! ! do NOT call json%destroy(q) here, because q is
! ! now part of the output structure p. p should be destroyed
! ! somewhere upstream by the caller of this routine.
! nullify(q) !OK, but not strictly necessary
! end subroutine example2
!````
generic,public :: destroy => json_value_destroy,destroy_json_core
procedure :: json_value_destroy
procedure :: destroy_json_core
!>
! If the child variable is present, then remove it.
generic,public :: remove_if_present => MAYBEWRAP(json_value_remove_if_present)
procedure :: MAYBEWRAP(json_value_remove_if_present)
!>
! Allocate a [[json_value]] pointer and make it a double variable.
! The pointer should not already be allocated.
!
!### Example
!
!````fortran
! type(json_core) :: json
! type(json_value),pointer :: p
! call json%create_double(p,'value',1.0_RK)
!````
generic,public :: create_double => MAYBEWRAP(json_value_create_double)
procedure :: MAYBEWRAP(json_value_create_double)
!>
! Allocate a [[json_value]] pointer and make it an array variable.
! The pointer should not already be allocated.
!
!### Example
!
!````fortran
! type(json_core) :: json
! type(json_value),pointer :: p
! call json%create_array(p,'arrayname')
!````
generic,public :: create_array => MAYBEWRAP(json_value_create_array)
procedure :: MAYBEWRAP(json_value_create_array)
!>
! Allocate a [[json_value]] pointer and make it an object variable.
! The pointer should not already be allocated.
!
!### Example
!
!````fortran
! type(json_core) :: json
! type(json_value),pointer :: p
! call json%create_object(p,'objectname')
!````
!
!@note The name is not significant for the root structure or an array element.
! In those cases, an empty string can be used.
generic,public :: create_object => MAYBEWRAP(json_value_create_object)
procedure :: MAYBEWRAP(json_value_create_object)
!>
! Allocate a json_value pointer and make it a null variable.
! The pointer should not already be allocated.
!
!### Example
!
!````fortran
! type(json_core) :: json
! type(json_value),pointer :: p
! call json%create_null(p,'value')
!````
generic,public :: create_null => MAYBEWRAP(json_value_create_null)
procedure :: MAYBEWRAP(json_value_create_null)
!>
! Allocate a json_value pointer and make it a string variable.
! The pointer should not already be allocated.
!
!### Example
!
!````fortran
! type(json_core) :: json
! type(json_value),pointer :: p
! call json%create_string(p,'value','foobar')
!````
generic,public :: create_string => MAYBEWRAP(json_value_create_string)
procedure :: MAYBEWRAP(json_value_create_string)
!>
! Allocate a json_value pointer and make it an integer variable.
! The pointer should not already be allocated.
!
!### Example
!
!````fortran
! type(json_core) :: json
! type(json_value),pointer :: p
! call json%create_integer(p,42,'value')
!````
generic,public :: create_integer => MAYBEWRAP(json_value_create_integer)
procedure :: MAYBEWRAP(json_value_create_integer)
!>
! Allocate a json_value pointer and make it a logical variable.
! The pointer should not already be allocated.
!
!### Example
!
!````fortran
! type(json_core) :: json
! type(json_value),pointer :: p
! call json%create_logical(p,'value',.true.)
!````
generic,public :: create_logical => MAYBEWRAP(json_value_create_logical)
procedure :: MAYBEWRAP(json_value_create_logical)
!>
! Parse the JSON file and populate the [[json_value]] tree.
generic,public :: parse => json_parse_file, MAYBEWRAP(json_parse_string)
procedure :: json_parse_file
procedure :: MAYBEWRAP(json_parse_string)
!>
! Throw an exception.
generic,public :: throw_exception => MAYBEWRAP(json_throw_exception)
procedure :: MAYBEWRAP(json_throw_exception)
!>
! Rename a [[json_value]] variable.
generic,public :: rename => MAYBEWRAP(json_value_rename)
procedure :: MAYBEWRAP(json_value_rename)
!>
! get info about a [[json_value]]
generic,public :: info => json_info, MAYBEWRAP(json_info_by_path)
procedure :: json_info
procedure :: MAYBEWRAP(json_info_by_path)
!>
! get string info about a [[json_value]]
generic,public :: string_info => json_string_info
procedure :: json_string_info
!>
! get matrix info about a [[json_value]]
generic,public :: matrix_info => json_matrix_info, MAYBEWRAP(json_matrix_info_by_path)
procedure :: json_matrix_info
procedure :: MAYBEWRAP(json_matrix_info_by_path)
!>
! insert a new element after an existing one,
! updating the JSON structure accordingly
generic,public :: insert_after => json_value_insert_after, &
json_value_insert_after_child_by_index
procedure :: json_value_insert_after
procedure :: json_value_insert_after_child_by_index
!>
! get the path to a JSON variable in a structure:
generic,public :: get_path => MAYBEWRAP(json_get_path)
procedure :: MAYBEWRAP(json_get_path)
procedure,public :: remove => json_value_remove !! Remove a [[json_value]] from a linked-list structure.
procedure,public :: replace => json_value_replace !! Replace a [[json_value]] in a linked-list structure.
procedure,public :: check_for_errors => json_check_for_errors !! check for error and get error message
procedure,public :: clear_exceptions => json_clear_exceptions !! clear exceptions
procedure,public :: count => json_count !! count the number of children
procedure,public :: clone => json_clone !! clone a JSON structure (deep copy)
procedure,public :: failed => json_failed !! check for error
procedure,public :: get_parent => json_get_parent !! get pointer to json_value parent
procedure,public :: get_next => json_get_next !! get pointer to json_value next
procedure,public :: get_previous => json_get_previous !! get pointer to json_value previous
procedure,public :: get_tail => json_get_tail !! get pointer to json_value tail
procedure,public :: initialize => json_initialize !! to initialize some parsing parameters
procedure,public :: traverse => json_traverse !! to traverse all elements of a JSON structure
procedure,public :: print_error_message => json_print_error_message !! simply routine to print error messages
procedure,public :: swap => json_value_swap !! Swap two [[json_value]] pointers
!! in a structure (or two different structures).
procedure,public :: is_child_of => json_value_is_child_of !! Check if a [[json_value]] is a descendant of another.
procedure,public :: validate => json_value_validate !! Check that a [[json_value]] linked list is valid
!! (i.e., is properly constructed). This may be
!! useful if it has been constructed externally.
!other private routines:
procedure :: name_equal
procedure :: json_value_print
procedure :: string_to_int
procedure :: string_to_dble
procedure :: parse_value
procedure :: parse_number
procedure :: parse_string
procedure :: parse_for_chars
procedure :: parse_object
procedure :: parse_array
procedure :: annotate_invalid_json
procedure :: pop_char
procedure :: push_char
procedure :: get_current_line_from_file_stream
procedure :: get_current_line_from_file_sequential
end type json_core