json_value_module Module

module~~json_value_module~~UsesGraph module~json_value_module json_value_module module~json_parameters json_parameters module~json_parameters->module~json_value_module module~json_string_utilities json_string_utilities module~json_parameters->module~json_string_utilities iso_fortran_env iso_fortran_env iso_fortran_env->module~json_value_module module~json_kinds json_kinds iso_fortran_env->module~json_kinds module~json_string_utilities->module~json_value_module module~json_kinds->module~json_value_module module~json_kinds->module~json_parameters module~json_kinds->module~json_string_utilities
Help

This module provides a low-level interface for manipulation of JSON data. The two public entities are json_value, and json_core. The json_file_module provides a higher-level interface to some of these routines.

License

  • JSON-Fortran is released under a BSD-style license. See the LICENSE file for details.

Used By

module~~json_value_module~~UsedByGraph module~json_value_module json_value_module module~json_file_module json_file_module module~json_value_module->module~json_file_module module~json_module json_module module~json_value_module->module~json_module module~json_file_module->module~json_module
Help

annotate_invalid_json destroy_json_core destroy_json_data get_current_line_from_file_sequential get_current_line_from_file_stream json_check_for_errors json_clear_exceptions json_clone json_get_array json_get_array_with_path json_get_by_path json_get_by_path_default json_get_by_path_rfc6901 json_get_double json_get_double_vec json_get_double_vec_with_path json_get_double_with_path json_get_integer json_get_integer_vec json_get_integer_vec_with_path json_get_integer_with_path json_get_logical json_get_logical_vec json_get_logical_vec_with_path json_get_logical_with_path json_get_next json_get_parent json_get_path json_get_previous json_get_string json_get_string_vec json_get_string_vec_with_path json_get_string_with_path json_get_tail json_info json_info_by_path json_initialize json_matrix_info json_matrix_info_by_path json_parse_file json_parse_string json_print_1 json_print_2 json_print_error_message json_throw_exception json_traverse json_update_double json_update_integer json_update_logical json_update_string json_update_string_name_ascii json_update_string_val_ascii json_value_add_double json_value_add_double_vec json_value_add_integer json_value_add_integer_vec json_value_add_logical json_value_add_logical_vec json_value_add_member json_value_add_null json_value_add_string json_value_add_string_name_ascii json_value_add_string_val_ascii json_value_add_string_vec json_value_add_string_vec_name_ascii json_value_add_string_vec_val_ascii json_value_clone_func json_value_create json_value_create_array json_value_create_double json_value_create_integer json_value_create_logical json_value_create_null json_value_create_object json_value_create_string json_value_destroy json_value_get_by_index json_value_get_by_name_chars json_value_get_child json_value_insert_after json_value_insert_after_child_by_index json_value_print json_value_remove json_value_remove_if_present json_value_rename json_value_swap json_value_to_string json_value_validate parse_array parse_for_chars parse_number parse_object parse_string parse_value pop_char push_char to_array to_double to_integer to_logical to_null to_object to_string wrap_json_get_array_with_path wrap_json_get_by_path wrap_json_get_double_vec_with_path wrap_json_get_double_with_path wrap_json_get_integer_vec_with_path wrap_json_get_integer_with_path wrap_json_get_logical_vec_with_path wrap_json_get_logical_with_path wrap_json_get_path wrap_json_get_string_vec_with_path wrap_json_get_string_with_path wrap_json_info_by_path wrap_json_matrix_info_by_path wrap_json_parse_string wrap_json_throw_exception wrap_json_update_double wrap_json_update_integer wrap_json_update_logical wrap_json_update_string wrap_json_value_add_double wrap_json_value_add_double_vec wrap_json_value_add_integer wrap_json_value_add_integer_vec wrap_json_value_add_logical wrap_json_value_add_logical_vec wrap_json_value_add_null wrap_json_value_add_string wrap_json_value_add_string_vec wrap_json_value_create_array wrap_json_value_create_double wrap_json_value_create_integer wrap_json_value_create_logical wrap_json_value_create_null wrap_json_value_create_object wrap_json_value_create_string wrap_json_value_get_by_name_chars wrap_json_value_remove_if_present wrap_json_value_rename

Variables

TypeVisibility AttributesNameInitial
character(kind=CDK,len=*), private, parameter:: access_spec ='STREAM'

If Unicode is not enabled, then JSON files are opened using access='STREAM' and form='UNFORMATTED'. This allows the file to be read faster.

character(kind=CDK,len=*), private, parameter:: form_spec ='UNFORMATTED'

If Unicode is not enabled, then JSON files are opened using access='STREAM' and form='UNFORMATTED'. This allows the file to be read faster.

logical, private, parameter:: use_unformatted_stream =.true.

If Unicode is not enabled, then JSON files are opened using access='STREAM' and form='UNFORMATTED'. This allows the file to be read faster.


Interfaces

public interface json_core

Structure constructor to initialize a json_core object

  • private function initialize_json_core(verbose, compact_reals, print_signs, real_format, spaces_per_tab, strict_type_checking, trailing_spaces_significant, case_sensitive_keys, no_whitespace, unescape_strings, comment_char, path_mode, path_separator) result(json_core_object)

    Author
    Jacob Williams
    Date
    4/26/2016

    Function constructor for a json_core. This is just a wrapper for json_initialize.

    Arguments

    Type IntentOptional AttributesName
    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 get routines (default is false)

    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: ! or #. Setting this to a blank string disables the ignoring of comments. (Default is !).

    integer(kind=IK), intent(in), optional :: path_mode

    How the path strings are interpreted in the get_by_path routines:

    character(kind=CK,len=1), intent(in), optional :: path_separator

    The path separator to use in the "default" mode for the paths in the various get_by_path routines. Example: . [default] or %. Note: if path_mode/=1 then this is ignored.

    Return Value type(json_core)


Abstract Interfaces

abstract interface

  • public subroutine json_array_callback_func(json, element, i, count)

    Array element callback function. Used by json_get_array

    Arguments

    Type IntentOptional AttributesName
    class(json_core), intent(inout) :: json
    type(json_value), intent(in), pointer:: element
    integer(kind=IK), intent(in) :: i

    index

    integer(kind=IK), intent(in) :: count

    size of array

abstract interface

  • public subroutine json_traverse_callback_func(json, p, finished)

    Callback function used by json_traverse

    Arguments

    Type IntentOptional AttributesName
    class(json_core), intent(inout) :: json
    type(json_value), intent(in), pointer:: p
    logical(kind=LK), intent(out) :: finished

    set true to stop traversing


Derived Types

type, public :: json_core

To access the core routines for manipulation of json_value pointer variables. This class allows for thread safe use of the module.

Components

TypeVisibility AttributesNameInitial
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 comment_char string.

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 allow_comments is true. Examples: '!' or '#'.

logical(kind=LK), private :: compact_real =.true.

to use the "compact" form of real numbers for output

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 get_by_path routines:

character(kind=CK,len=1), private :: 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.

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 default_real_fmt is used instead.

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 get routines if the actual variable type is different from the return type (for example, integer to double).

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.

Constructor

Structure constructor to initialize a json_core object

private function initialize_json_core(verbose, compact_reals, print_signs, real_format, spaces_per_tab, strict_type_checking, trailing_spaces_significant, case_sensitive_keys, no_whitespace, unescape_strings, comment_char, path_mode, path_separator)

Function constructor for a json_core. This is just a wrapper for json_initialize.

Type-Bound Procedures

generic, public :: add => json_value_add_member, json_value_add_null, json_value_add_integer, json_value_add_integer_vec, json_value_add_double, json_value_add_double_vec, json_value_add_logical, json_value_add_logical_vec, json_value_add_string, json_value_add_string_vec

Add objects to a linked list of json_values.

procedure, private :: annotate_invalid_json
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 :: clone => json_clone

clone a JSON structure (deep copy)

procedure, public :: count => json_count

count the number of children

generic, public :: create_array => json_value_create_array

Allocate a json_value pointer and make it an array variable. The pointer should not already be allocated.

generic, public :: create_double => json_value_create_double

Allocate a json_value pointer and make it a double variable. The pointer should not already be allocated.

generic, public :: create_integer => json_value_create_integer

Allocate a json_value pointer and make it an integer variable. The pointer should not already be allocated.

generic, public :: create_logical => json_value_create_logical

Allocate a json_value pointer and make it a logical variable. The pointer should not already be allocated.

generic, public :: create_null => json_value_create_null

Allocate a json_value pointer and make it a null variable. The pointer should not already be allocated.

generic, public :: create_object => json_value_create_object

Allocate a json_value pointer and make it an object variable. The pointer should not already be allocated.

generic, public :: create_string => json_value_create_string

Allocate a json_value pointer and make it a string variable. The pointer should not already be allocated.

generic, public :: destroy => json_value_destroy, destroy_json_core

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.

procedure, private :: destroy_json_core
procedure, public :: failed => json_failed

check for error

generic, public :: get => json_get_by_path, json_get_integer, json_get_integer_with_path, json_get_integer_vec, json_get_integer_vec_with_path, json_get_double, json_get_double_with_path, json_get_double_vec, json_get_double_vec_with_path, json_get_logical, json_get_logical_with_path, json_get_logical_vec, json_get_logical_vec_with_path, json_get_string, json_get_string_with_path, json_get_string_vec, json_get_string_vec_with_path, json_get_array, json_get_array_with_path

Get data from a json_value linked list.

generic, public :: get_child => json_value_get_by_index, json_value_get_child, json_value_get_by_name_chars
procedure, private :: get_current_line_from_file_sequential
procedure, private :: get_current_line_from_file_stream
procedure, public :: get_next => json_get_next

get pointer to json_value next

procedure, public :: get_parent => json_get_parent

get pointer to json_value parent

generic, public :: get_path => json_get_path

get the path to a JSON variable in a structure:

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

generic, public :: info => json_info, json_info_by_path

get info about a json_value

procedure, public :: initialize => json_initialize

to initialize some parsing parameters

generic, public :: insert_after => json_value_insert_after, json_value_insert_after_child_by_index

insert a new element after an existing one, updating the JSON structure accordingly

procedure, public :: is_child_of => json_value_is_child_of

Check if a json_value is a descendant of another.

procedure, private :: json_get_array
procedure, private :: json_get_array_with_path
procedure, private :: json_get_by_path
procedure, private :: json_get_by_path_default
procedure, private :: json_get_by_path_rfc6901
procedure, private :: json_get_double
procedure, private :: json_get_double_vec
procedure, private :: json_get_double_vec_with_path
procedure, private :: json_get_double_with_path
procedure, private :: json_get_integer
procedure, private :: json_get_integer_vec
procedure, private :: json_get_integer_vec_with_path
procedure, private :: json_get_integer_with_path
procedure, private :: json_get_logical
procedure, private :: json_get_logical_vec
procedure, private :: json_get_logical_vec_with_path
procedure, private :: json_get_logical_with_path
procedure, private :: json_get_path
procedure, private :: json_get_string
procedure, private :: json_get_string_vec
procedure, private :: json_get_string_vec_with_path
procedure, private :: json_get_string_with_path
procedure, private :: json_info
procedure, private :: json_info_by_path
procedure, private :: json_matrix_info
procedure, private :: json_matrix_info_by_path
procedure, private :: json_parse_file
procedure, private :: json_parse_string
procedure, private :: json_print_1
procedure, private :: json_print_2
procedure, private :: json_throw_exception
procedure, private :: json_update_double
procedure, private :: json_update_integer
procedure, private :: json_update_logical
procedure, private :: json_update_string
procedure, private :: json_value_add_double
procedure, private :: json_value_add_double_vec
procedure, private :: json_value_add_integer
procedure, private :: json_value_add_integer_vec
procedure, private :: json_value_add_logical
procedure, private :: json_value_add_logical_vec
procedure, private :: json_value_add_member
procedure, private :: json_value_add_null
procedure, private :: json_value_add_string
procedure, private :: json_value_add_string_vec
procedure, private :: json_value_create_array
procedure, private :: json_value_create_double
procedure, private :: json_value_create_integer
procedure, private :: json_value_create_logical
procedure, private :: json_value_create_null
procedure, private :: json_value_create_object
procedure, private :: json_value_create_string
procedure, private :: json_value_destroy
procedure, private :: json_value_get_by_index
procedure, private :: json_value_get_by_name_chars
procedure, private :: json_value_get_child
procedure, private :: json_value_insert_after
procedure, private :: json_value_insert_after_child_by_index
procedure, private :: json_value_print
procedure, private :: json_value_remove_if_present
procedure, private :: json_value_rename
generic, public :: matrix_info => json_matrix_info, json_matrix_info_by_path

get matrix info about a json_value

procedure, private :: name_equal
generic, public :: parse => json_parse_file, json_parse_string

Parse the JSON file and populate the json_value tree.

procedure, private :: parse_array
procedure, private :: parse_for_chars
procedure, private :: parse_number
procedure, private :: parse_object
procedure, private :: parse_string
procedure, private :: parse_value
procedure, private :: pop_char
generic, public :: print => json_print_1, json_print_2

Print the json_value to a file.

procedure, public :: print_error_message => json_print_error_message

simply routine to print error messages

procedure, public :: print_to_string => json_value_to_string

Print the json_value structure to an allocatable string

procedure, private :: push_char
procedure, public :: remove => json_value_remove

Remove a json_value from a linked-list structure.

generic, public :: remove_if_present => json_value_remove_if_present

If the child variable is present, then remove it.

generic, public :: rename => json_value_rename

Rename a json_value variable.

procedure, private :: string_to_dble
procedure, private :: string_to_int
procedure, public :: swap => json_value_swap

Swap two json_value pointers in a structure (or two different structures).

generic, public :: throw_exception => json_throw_exception

Throw an exception.

procedure, public :: traverse => json_traverse

to traverse all elements of a JSON structure

generic, public :: update => json_update_logical, json_update_double, json_update_integer, json_update_string

These are like the add methods, except if a child with the same name 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).

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.

type, public, sequence :: json_value

Type used to construct the linked-list JSON structure. Normally, this should always be a pointer variable. This type should only be used by an instance of json_core.

Components

TypeVisibility AttributesNameInitial
type(json_value), private, pointer:: children=> null()

first child item of this

real(kind=RK), private, allocatable:: dbl_value

real data for this variable

integer(kind=IK), private, allocatable:: int_value

integer data for this variable

logical(kind=LK), private, allocatable:: log_value

logical data for this variable

integer(kind=IK), private :: n_children =0

number of children

character(kind=CK,len=:), private, allocatable:: name

variable name

type(json_value), private, pointer:: next=> null()

next item in the list

type(json_value), private, pointer:: parent=> null()

parent item of this

type(json_value), private, pointer:: previous=> null()

previous item in the list

character(kind=CK,len=:), private, allocatable:: str_value

string data for this variable

type(json_value), private, pointer:: tail=> null()

last child item of this

integer(kind=IK), private :: var_type =json_unknown

variable type


Functions

private function initialize_json_core(verbose, compact_reals, print_signs, real_format, spaces_per_tab, strict_type_checking, trailing_spaces_significant, case_sensitive_keys, no_whitespace, unescape_strings, comment_char, path_mode, path_separator) result(json_core_object)

Author
Jacob Williams
Date
4/26/2016

Function constructor for a json_core. This is just a wrapper for json_initialize.

Arguments

Type IntentOptional AttributesName
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 get routines (default is false)

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: ! or #. Setting this to a blank string disables the ignoring of comments. (Default is !).

integer(kind=IK), intent(in), optional :: path_mode

How the path strings are interpreted in the get_by_path routines:

character(kind=CK,len=1), intent(in), optional :: path_separator

The path separator to use in the "default" mode for the paths in the various get_by_path routines. Example: . [default] or %. Note: if path_mode/=1 then this is ignored.

Return Value type(json_core)

private function json_count(json, p) result(count)

Count the number of children.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), intent(in), pointer:: p

Return Value integer(kind=IK)

number of children

private pure function json_failed(json) result(failed)

Author
Jacob Williams
Date
12/5/2013

Logical function to indicate if an exception has been thrown in a json_core.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(in) :: json

Return Value logical(kind=LK)

will be true if an exception has been thrown.

private function json_value_is_child_of(json, p1, p2) result(is_child_of)

Author
Jacob Williams
Date
4/28/2016

Returns True if p2 is a descendant of p1 (i.e, a child, or a child of child, etc.)

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p1
type(json_value), pointer:: p2

Return Value logical(kind=LK)

private function name_equal(json, p, name) result(is_equal)

Author
Jacob Williams
Date
4/30/2016

Returns true if name is equal to p%name, using the specified settings for case sensitivity and trailing whitespace.

Arguments

Type IntentOptional AttributesName
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

Return Value logical(kind=LK)

true if the string are lexically equal

private function string_to_dble(json, str) result(rval)

Convert a string into a double.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
character(kind=CK,len=*), intent(in) :: str

Return Value real(kind=RK)

private function string_to_int(json, str) result(ival)

Convert a string into an integer.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
character(kind=CK,len=*), intent(in) :: str

Return Value integer(kind=IK)


Subroutines

private subroutine annotate_invalid_json(json, iunit, str)

Generate a warning message if there was an error parsing a JSON file or string.

Arguments

Type IntentOptional AttributesName
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

private subroutine destroy_json_core(me)

Author
Jacob Williams
Date
4/17/2016

Destructor for the json_core type.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(out) :: me

private subroutine destroy_json_data(d)

Author
Jacob Williams

Destroy the data within a json_value, and reset type to json_unknown.

Arguments

Type IntentOptional AttributesName
type(json_value), intent(inout) :: d

private subroutine get_current_line_from_file_sequential(json, iunit, line)

Author
Jacob Williams

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).

Arguments

Type IntentOptional AttributesName
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

private subroutine get_current_line_from_file_stream(json, iunit, line)

Author
Jacob Williams

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).

Arguments

Type IntentOptional AttributesName
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

private subroutine json_check_for_errors(json, status_ok, error_msg)

Author
Jacob Williams
Date
12/4/2013

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.

Arguments

Type IntentOptional AttributesName
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)

private pure subroutine json_clear_exceptions(json)

Author
Jacob Williams
Date
12/4/2013

Clear exceptions in the json_core.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json

private subroutine json_clone(json, from, to)

Author
Jacob Williams
Date
10/31/2015

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

Arguments

Type IntentOptional AttributesName
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)

private subroutine json_get_array(json, me, array_callback)

This routine calls the user-supplied json_array_callback_func subroutine for each element in the array.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), intent(in), pointer:: me
procedure(json_array_callback_func) :: array_callback

private subroutine json_get_array_with_path(json, me, path, array_callback, found)

This routine calls the user-supplied array_callback subroutine for each element in the array (specified by the path).

Arguments

Type IntentOptional AttributesName
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

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

Returns the json_value pointer given the path string.

Arguments

Type IntentOptional AttributesName
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 path

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

true if it was found

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

Returns the json_value pointer given the path string.

Arguments

Type IntentOptional AttributesName
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 path

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

true if it was found

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

Author
Jacob Williams
Date
2/4/2017

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

Arguments

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

a JSON linked list

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

path to the variable (an RFC 6901 "JSON Pointer")

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

pointer to the variable specify by path

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

true if it was found

private subroutine json_get_double(json, me, value)

Get a double value from a json_value.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: me
real(kind=RK), intent(out) :: value

private subroutine json_get_double_vec(json, me, vec)

Author
Jacob Williams
Date
5/14/2014

Get a double vector from a json_value.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: me
real(kind=RK), intent(out), dimension(:), allocatable:: vec

private subroutine json_get_double_vec_with_path(json, me, path, vec, found)

Get a double vector from a json_value, given the path.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: me
character(kind=CK,len=*), intent(in) :: path
real(kind=RK), intent(out), dimension(:), allocatable:: vec
logical(kind=LK), intent(out), optional :: found

private subroutine json_get_double_with_path(json, me, path, value, found)

Get a double value from a json_value, given the path.

Arguments

Type IntentOptional AttributesName
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

private subroutine json_get_integer(json, me, value)

Get an integer value from a json_value.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), intent(in), pointer:: me
integer(kind=IK), intent(out) :: value

private subroutine json_get_integer_vec(json, me, vec)

Author
Jacob Williams
Date
5/14/2014

Get an integer vector from a json_value.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: me
integer(kind=IK), intent(out), dimension(:), allocatable:: vec

private subroutine json_get_integer_vec_with_path(json, me, path, vec, found)

Get an integer vector from a json_value, given the path string.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: me
character(kind=CK,len=*), intent(in) :: path
integer(kind=IK), intent(out), dimension(:), allocatable:: vec
logical(kind=LK), intent(out), optional :: found

private subroutine json_get_integer_with_path(json, me, path, value, found)

Get an integer value from a json_value, given the path string.

Arguments

Type IntentOptional AttributesName
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

private subroutine json_get_logical(json, me, value)

Get a logical value from a json_value.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), intent(in), pointer:: me
logical(kind=LK) :: value

private subroutine json_get_logical_vec(json, me, vec)

Author
Jacob Williams
Date
5/14/2014

Get a logical vector from json_value.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), intent(in), pointer:: me
logical(kind=LK), intent(out), dimension(:), allocatable:: vec

private subroutine json_get_logical_vec_with_path(json, me, path, vec, found)

Get a logical vector from a json_value, given the path.

Arguments

Type IntentOptional AttributesName
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

private subroutine json_get_logical_with_path(json, me, path, value, found)

Get a logical value from a json_value, given the path.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), intent(in), pointer:: me
character(kind=CK,len=*), intent(in) :: path
logical(kind=LK) :: value
logical(kind=LK), intent(out), optional :: found

private subroutine json_get_next(json, p, next)

Author
Jacob Williams
Date
10/31/2015

Returns a pointer to the next of a json_value. If there is no next, then a null() pointer is returned.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), intent(in), pointer:: p

JSON object

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

pointer to next

private subroutine json_get_parent(json, p, parent)

Author
Jacob Williams
Date
10/16/2015

Returns a pointer to the parent of a json_value. If there is no parent, then a null() pointer is returned.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), intent(in), pointer:: p

JSON object

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

pointer to parent

private subroutine json_get_path(json, p, path, found, use_alt_array_tokens, path_sep)

Returns the path to a JSON object that is part of a linked list structure.

Arguments

Type IntentOptional AttributesName
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 json%path_separator)

private subroutine json_get_previous(json, p, previous)

Author
Jacob Williams
Date
10/31/2015

Returns a pointer to the previous of a json_value. If there is no previous, then a null() pointer is returned.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), intent(in), pointer:: p

JSON object

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

pointer to previous

private subroutine json_get_string(json, me, value)

Get a character string from a json_value.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), intent(in), pointer:: me
character(kind=CK,len=:), intent(out), allocatable:: value

private subroutine json_get_string_vec(json, me, vec)

Author
Jacob Williams
Date
5/14/2014

Get a string vector from a json_value.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), intent(in), pointer:: me
character(kind=CK,len=*), intent(out), dimension(:), allocatable:: vec

private subroutine json_get_string_vec_with_path(json, me, path, vec, found)

Get a string vector from a json_value, given the path.

Arguments

Type IntentOptional AttributesName
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

private subroutine json_get_string_with_path(json, me, path, value, found)

Get a character string from a json_value, given the path.

Arguments

Type IntentOptional AttributesName
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

private subroutine json_get_tail(json, p, tail)

Author
Jacob Williams
Date
10/31/2015

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.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), intent(in), pointer:: p

JSON object

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

pointer to tail

private subroutine json_info(json, p, var_type, n_children, name)

Author
Jacob Williams
Date
2/13/2014

Returns information about a json_value.

Arguments

Type IntentOptional AttributesName
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

private subroutine json_info_by_path(json, p, path, found, var_type, n_children, name)

Arguments

Type IntentOptional AttributesName
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

private subroutine json_initialize(json, verbose, compact_reals, print_signs, real_format, spaces_per_tab, strict_type_checking, trailing_spaces_significant, case_sensitive_keys, no_whitespace, unescape_strings, comment_char, path_mode, path_separator)

Author
Jacob Williams
Date
12/4/2013

Initialize the json_core instance.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
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 get routines (default is false)

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: ! or #. Setting this to a blank string disables the ignoring of comments. (Default is !).

integer(kind=IK), intent(in), optional :: path_mode

How the path strings are interpreted in the get_by_path routines:

character(kind=CK,len=1), intent(in), optional :: path_separator

The path separator to use in the "default" mode for the paths in the various get_by_path routines. Example: . [default] or %. Note: if path_mode/=1 then this is ignored.

private subroutine json_matrix_info(json, p, is_matrix, var_type, n_sets, set_size, name)

Author
Jacob Williams
Date
10/16/2015

Alternate version of json_info that returns matrix information about a json_value.

Arguments

Type IntentOptional AttributesName
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

private subroutine json_matrix_info_by_path(json, p, path, is_matrix, found, var_type, n_sets, set_size, name)

Returns matrix information about a json_value, given the path.

Arguments

Type IntentOptional AttributesName
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

private subroutine json_parse_file(json, file, p, unit)

Parse the JSON file and populate the json_value tree.

Arguments

Type IntentOptional AttributesName
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)

private subroutine json_parse_string(json, p, str)

Parse the JSON string and populate the json_value tree.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p

output structure

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

string with JSON data

private subroutine json_print_1(json, p, iunit)

Author
Jacob Williams
Date
6/20/2014

Print the json_value structure to a file.

Arguments

Type IntentOptional AttributesName
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).

private subroutine json_print_2(json, p, filename)

Author
Jacob Williams
Date
12/23/2014

Print the json_value structure to a file.

Arguments

Type IntentOptional AttributesName
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)

private subroutine json_print_error_message(json, io_unit)

Author
Jacob Williams

Print any error message, and then clear the exceptions.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
integer, intent(in), optional :: io_unit

private subroutine json_throw_exception(json, msg)

Author
Jacob Williams
Date
12/4/2013

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.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
character(kind=CK,len=*), intent(in) :: msg

the error message

private subroutine json_traverse(json, p, traverse_callback)

Author
Jacob Williams
Date
4/28/2016

Traverse a JSON structure. This routine calls the user-specified json_traverse_callback_func for each element of the structure.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), intent(in), pointer:: p
procedure(json_traverse_callback_func) :: traverse_callback

private subroutine json_update_double(json, p, name, val, found)

Author
Jacob Williams
Date
12/6/2014

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.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CK,len=*), intent(in) :: name
real(kind=RK), intent(in) :: val
logical(kind=LK), intent(out) :: found

private subroutine json_update_integer(json, p, name, val, found)

Author
Jacob Williams
Date
12/6/2014

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.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CK,len=*), intent(in) :: name
integer(kind=IK), intent(in) :: val
logical(kind=LK), intent(out) :: found

private subroutine json_update_logical(json, p, name, val, found)

Author
Jacob Williams
Date
12/6/2014

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.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CK,len=*), intent(in) :: name
logical(kind=LK), intent(in) :: val
logical(kind=LK), intent(out) :: found

private subroutine json_update_string(json, p, name, val, found)

Author
Jacob Williams
Date
12/6/2014

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.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CK,len=*), intent(in) :: name
character(kind=CK,len=*), intent(in) :: val
logical(kind=LK), intent(out) :: found

private subroutine json_update_string_name_ascii(json, p, name, val, found)

Alternate version of json_update_string, where name is kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CDK,len=*), intent(in) :: name
character(kind=CK,len=*), intent(in) :: val
logical(kind=LK), intent(out) :: found

private subroutine json_update_string_val_ascii(json, p, name, val, found)

Alternate version of json_update_string, where val is kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CK,len=*), intent(in) :: name
character(kind=CDK,len=*), intent(in) :: val
logical(kind=LK), intent(out) :: found

private subroutine json_value_add_double(json, p, name, val)

Author
Jacob Williams
Date
1/19/2014

Add a real value child to the json_value variable

Arguments

Type IntentOptional AttributesName
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

private subroutine json_value_add_double_vec(json, p, name, val)

Author
Jacob Williams
Date
1/20/2014

Add a real vector to the structure.

Arguments

Type IntentOptional AttributesName
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

private subroutine json_value_add_integer(json, p, name, val)

Author
Jacob Williams
Date
1/20/2014

Add an integer value child to the json_value variable

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CK,len=*), intent(in) :: name
integer(kind=IK), intent(in) :: val

private subroutine json_value_add_integer_vec(json, p, name, val)

Author
Jacob Williams
Date
1/20/2014

Add an integer vector to the structure.

Arguments

Type IntentOptional AttributesName
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

private subroutine json_value_add_logical(json, p, name, val)

Author
Jacob Williams
Date
1/20/2014

Add a logical value child to the json_value variable

Arguments

Type IntentOptional AttributesName
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

private subroutine json_value_add_logical_vec(json, p, name, val)

Author
Jacob Williams
Date
1/20/2014

Add a logical vector to the structure.

Arguments

Type IntentOptional AttributesName
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

private subroutine json_value_add_member(json, p, member)

Adds member as a child of p.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
type(json_value), pointer:: member

the child member to add

private subroutine json_value_add_null(json, p, name)

Add a NULL value child to the json_value variable

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CK,len=*), intent(in) :: name

private subroutine json_value_add_string(json, p, name, val)

Author
Jacob Williams
Date
1/19/2014

Add a character string child to the json_value variable.

Arguments

Type IntentOptional AttributesName
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

private subroutine json_value_add_string_name_ascii(json, p, name, val)

Alternate version of json_value_add_string where name is kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CDK,len=*), intent(in) :: name

name of the variable

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

value

private subroutine json_value_add_string_val_ascii(json, p, name, val)

Alternate version of json_value_add_string where val is kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CK,len=*), intent(in) :: name

name of the variable

character(kind=CDK,len=*), intent(in) :: val

value

private subroutine json_value_add_string_vec(json, p, name, val, trim_str, adjustl_str)

Author
Jacob Williams
Date
1/19/2014

Add an array of character strings to the structure.

Arguments

Type IntentOptional AttributesName
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

private subroutine json_value_add_string_vec_name_ascii(json, p, name, val, trim_str, adjustl_str)

Alternate version of json_value_add_string_vec where name is kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CDK,len=*), intent(in) :: name
character(kind=CK,len=*), intent(in), dimension(:):: val
logical(kind=LK), intent(in), optional :: trim_str
logical(kind=LK), intent(in), optional :: adjustl_str

private subroutine json_value_add_string_vec_val_ascii(json, p, name, val, trim_str, adjustl_str)

Alternate version of json_value_add_string_vec where val is kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CK,len=*), intent(in) :: name
character(kind=CDK,len=*), intent(in), dimension(:):: val
logical(kind=LK), intent(in), optional :: trim_str
logical(kind=LK), intent(in), optional :: adjustl_str

private recursive subroutine json_value_clone_func(from, to, parent, previous, next, children, tail)

Author
Jacob Williams
Date
10/31/2015

Recursive deep copy function called by json_clone.

Arguments

Type IntentOptional AttributesName
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)

type(json_value), optional pointer:: parent

to%parent

type(json_value), optional pointer:: previous

to%previous

type(json_value), optional pointer:: next

to%next

type(json_value), optional pointer:: children

to%children

logical, optional :: tail

if "to" is the tail of its parent's children

private subroutine json_value_create(p)

Allocate a json_value pointer variable. This should be called before adding data to it.

Arguments

Type IntentOptional AttributesName
type(json_value), pointer:: p

private subroutine json_value_create_array(json, p, name)

Author
Jacob Williams

Allocate a json_value pointer and make it an array variable. The pointer should not already be allocated.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CK,len=*), intent(in) :: name

private subroutine json_value_create_double(json, p, val, name)

Author
Jacob Williams

Allocate a json_value pointer and make it a real(RK) variable. The pointer should not already be allocated.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
real(kind=RK), intent(in) :: val
character(kind=CK,len=*), intent(in) :: name

private subroutine json_value_create_integer(json, p, val, name)

Author
Jacob Williams

Allocate a json_value pointer and make it an integer(IK) variable. The pointer should not already be allocated.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
integer(kind=IK), intent(in) :: val
character(kind=CK,len=*), intent(in) :: name

private subroutine json_value_create_logical(json, p, val, name)

Author
Jacob Williams

Allocate a json_value pointer and make it a logical(LK) variable. The pointer should not already be allocated.

Arguments

Type IntentOptional AttributesName
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

private subroutine json_value_create_null(json, p, name)

Author
Jacob Williams

Allocate a json_value pointer and make it a null variable. The pointer should not already be allocated.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CK,len=*), intent(in) :: name

private subroutine json_value_create_object(json, p, name)

Author
Jacob Williams

Allocate a json_value pointer and make it an object variable. The pointer should not already be allocated.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CK,len=*), intent(in) :: name

private subroutine json_value_create_string(json, p, val, name)

Author
Jacob Williams

Allocate a json_value pointer and make it a string variable. The pointer should not already be allocated.

Arguments

Type IntentOptional AttributesName
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

private recursive subroutine json_value_destroy(json, p, destroy_next)

Author
Jacob Williams
Date
1/22/2014

Destroy a json_value linked-list structure.

Arguments

Type IntentOptional AttributesName
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 p%next is also destroyed (default is true)

private subroutine json_value_get_by_index(json, p, idx, child)

Returns a child in the object or array given the index.

Arguments

Type IntentOptional AttributesName
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

type(json_value), pointer:: child

pointer to the child

private subroutine json_value_get_by_name_chars(json, p, name, child)

Returns a child in the object or array given the name string.

Arguments

Type IntentOptional AttributesName
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 p

type(json_value), pointer:: child

pointer to the child

private subroutine json_value_get_child(json, p, child)

Returns pointer to the first child of the object (or null() if it is not associated).

Arguments

Type IntentOptional AttributesName
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

private subroutine json_value_insert_after(json, p, element)

Inserts element after p, and updates the JSON structure accordingly.

Arguments

Type IntentOptional AttributesName
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 p

private subroutine json_value_insert_after_child_by_index(json, p, idx, element)

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.

Arguments

Type IntentOptional AttributesName
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 p to insert the new element after

type(json_value), pointer:: element

the element to insert

private recursive subroutine json_value_print(json, p, iunit, str, indent, need_comma, colon, is_array_element)

Print the JSON structure to a string or a file.

Arguments

Type IntentOptional AttributesName
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

private subroutine json_value_remove(json, p, destroy)

Author
Jacob Williams
Date
9/9/2014

Remove a json_value (and all its children) from a linked-list structure, preserving the rest of the structure.

Arguments

Type IntentOptional AttributesName
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.

private subroutine json_value_remove_if_present(json, p, name)

Author
Jacob Williams
Date
12/6/2014

Given the path string, remove the variable from the json_value structure, if it exists.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CK,len=*), intent(in) :: name

private subroutine json_value_rename(json, p, name)

Author
Jacob Williams
Date
4/29/2016

Rename a json_value.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), intent(in), pointer:: p
character(kind=CK,len=*), intent(in) :: name

new variable name

private subroutine json_value_swap(json, p1, p2)

Author
Jacob Williams
Date
4/26/2016

Swap two elements in a JSON structure. All of the children are carried along as well.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p1
type(json_value), pointer:: p2

private subroutine json_value_to_string(json, p, str)

Author
Jacob Williams
Date
2/12/2014

Print the json_value structure to an allocatable string.

Arguments

Type IntentOptional AttributesName
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

private subroutine json_value_validate(json, p, is_valid, error_msg)

Author
Jacob Williams
Date
5/2/2016

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.

Arguments

Type IntentOptional AttributesName
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

private recursive subroutine parse_array(json, unit, str, array)

Core parsing routine.

Arguments

Type IntentOptional AttributesName
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

private subroutine parse_for_chars(json, unit, str, chars)

Core parsing routine.

Arguments

Type IntentOptional AttributesName
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.

private subroutine parse_number(json, unit, str, value)

Author
Jacob Williams
Date
1/20/2014

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.

Arguments

Type IntentOptional AttributesName
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

private recursive subroutine parse_object(json, unit, str, parent)

Core parsing routine.

Arguments

Type IntentOptional AttributesName
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

private subroutine parse_string(json, unit, str, string)

Parses a string while reading a JSON file.

Arguments

Type IntentOptional AttributesName
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

private recursive subroutine parse_value(json, unit, str, value)

Core parsing routine.

Arguments

Type IntentOptional AttributesName
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

private recursive subroutine pop_char(json, unit, str, skip_ws, skip_comments, eof, popped)

Get the next character from the file (or string).

Arguments

Type IntentOptional AttributesName
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

private subroutine push_char(json, c)

Core routine.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
character(kind=CK,len=1), intent(in) :: c

to character to push

private subroutine to_array(p, name)

Author
Jacob Williams

Change the json_value variable to an array.

Arguments

Type IntentOptional AttributesName
type(json_value), intent(inout) :: p
character(kind=CK,len=*), intent(in), optional :: name

if the name is also to be changed.

private subroutine to_double(p, val, name)

Author
Jacob Williams

Change the json_value variable to a double.

Arguments

Type IntentOptional AttributesName
type(json_value), intent(inout) :: p
real(kind=RK), intent(in), optional :: val

if the value is also to be set (if not present, then 0.0_rk is used).

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

if the name is also to be changed.

private subroutine to_integer(p, val, name)

Author
Jacob Williams

Change the json_value variable to an integer.

Arguments

Type IntentOptional AttributesName
type(json_value), intent(inout) :: p
integer(kind=IK), intent(in), optional :: val

if the value is also to be set (if not present, then 0 is used).

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

if the name is also to be changed.

private subroutine to_logical(p, val, name)

Author
Jacob Williams

Change the json_value variable to a logical.

Arguments

Type IntentOptional AttributesName
type(json_value), intent(inout) :: p
logical(kind=LK), intent(in), optional :: val

if the value is also to be set (if not present, then .false. is used).

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

if the name is also to be changed.

private subroutine to_null(p, name)

Author
Jacob Williams

Change the json_value variable to a null.

Arguments

Type IntentOptional AttributesName
type(json_value), intent(inout) :: p
character(kind=CK,len=*), intent(in), optional :: name

if the name is also to be changed.

private subroutine to_object(p, name)

Author
Jacob Williams

Change the json_value variable to an object.

Arguments

Type IntentOptional AttributesName
type(json_value), intent(inout) :: p
character(kind=CK,len=*), intent(in), optional :: name

if the name is also to be changed.

private subroutine to_string(p, val, name)

Author
Jacob Williams

Change the json_value variable to a string.

Arguments

Type IntentOptional AttributesName
type(json_value), intent(inout) :: p
character(kind=CK,len=*), intent(in), optional :: val

if the value is also to be set (if not present, then '' is used).

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

if the name is also to be changed.

private subroutine wrap_json_get_array_with_path(json, me, path, array_callback, found)

Alternate version of json_get_array_with_path, where "path" is kind=CDK

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), intent(in), pointer:: me
character(kind=CDK,len=*), intent(in) :: path
procedure(json_array_callback_func) :: array_callback
logical(kind=LK), intent(out), optional :: found

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

Alternate version of json_get_by_path where "path" is kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), intent(in), pointer:: me
character(kind=CDK,len=*), intent(in) :: path
type(json_value), intent(out), pointer:: p
logical(kind=LK), intent(out), optional :: found

private subroutine wrap_json_get_double_vec_with_path(json, me, path, vec, found)

Alternate version of json_get_double_vec_with_path, where "path" is kind=CDK

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: me
character(kind=CDK,len=*), intent(in) :: path
real(kind=RK), intent(out), dimension(:), allocatable:: vec
logical(kind=LK), intent(out), optional :: found

private subroutine wrap_json_get_double_with_path(json, me, path, value, found)

Alternate version of json_get_double_with_path, where "path" is kind=CDK

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: me
character(kind=CDK,len=*), intent(in) :: path
real(kind=RK), intent(out) :: value
logical(kind=LK), intent(out), optional :: found

private subroutine wrap_json_get_integer_vec_with_path(json, me, path, vec, found)

Alternate version of json_get_integer_vec_with_path, where "path" is kind=CDK

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: me
character(kind=CDK,len=*), intent(in) :: path
integer(kind=IK), intent(out), dimension(:), allocatable:: vec
logical(kind=LK), intent(out), optional :: found

private subroutine wrap_json_get_integer_with_path(json, me, path, value, found)

Alternate version of json_get_integer_with_path, where "path" is kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), intent(in), pointer:: me
character(kind=CDK,len=*), intent(in) :: path
integer(kind=IK), intent(out) :: value
logical(kind=LK), intent(out), optional :: found

private subroutine wrap_json_get_logical_vec_with_path(json, me, path, vec, found)

Alternate version of json_get_logical_vec_with_path, where "path" is kind=CDK

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), intent(in), pointer:: me
character(kind=CDK,len=*), intent(in) :: path
logical(kind=LK), intent(out), dimension(:), allocatable:: vec
logical(kind=LK), intent(out), optional :: found

private subroutine wrap_json_get_logical_with_path(json, me, path, value, found)

Alternate version of json_get_logical_with_path, where "path" is kind=CDK

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), intent(in), pointer:: me
character(kind=CDK,len=*), intent(in) :: path
logical(kind=LK) :: value
logical(kind=LK), intent(out), optional :: found

private subroutine wrap_json_get_path(json, p, path, found, use_alt_array_tokens, path_sep)

Wrapper for json_get_path where "path" and "path_sep" are kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), intent(in), pointer:: p

a JSON linked list object

character(kind=CDK,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=CDK,len=1), intent(in), optional :: path_sep

character to use for path separator (default is '.')

private subroutine wrap_json_get_string_vec_with_path(json, me, path, vec, found)

Alternate version of json_get_string_vec_with_path, where "path" is kind=CDK

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), intent(in), pointer:: me
character(kind=CDK,len=*), intent(in) :: path
character(kind=CK,len=*), intent(out), dimension(:), allocatable:: vec
logical(kind=LK), intent(out), optional :: found

private subroutine wrap_json_get_string_with_path(json, me, path, value, found)

Alternate version of json_get_string_with_path, where "path" is kind=CDK

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), intent(in), pointer:: me
character(kind=CDK,len=*), intent(in) :: path
character(kind=CK,len=:), intent(out), allocatable:: value
logical(kind=LK), intent(out), optional :: found

private subroutine wrap_json_info_by_path(json, p, path, found, var_type, n_children, name)

Alternate version of json_info_by_path where "path" is kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), intent(in), pointer:: p

a JSON linked list

character(kind=CDK,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

private subroutine wrap_json_matrix_info_by_path(json, p, path, is_matrix, found, var_type, n_sets, set_size, name)

Alternate version of json_matrix_info_by_path where "path" is kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p

a JSON linked list

character(kind=CDK,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

private subroutine wrap_json_parse_string(json, p, str)

Alternate version of json_parse_string, where str is kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p

output structure

character(kind=CDK,len=*), intent(in) :: str

string with JSON data

private subroutine wrap_json_throw_exception(json, msg)

Alternate version of json_throw_exception, where msg is kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
character(kind=CDK,len=*), intent(in) :: msg

the error message

private subroutine wrap_json_update_double(json, p, name, val, found)

Alternate version of json_update_double, where name is kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CDK,len=*), intent(in) :: name
real(kind=RK), intent(in) :: val
logical(kind=LK), intent(out) :: found

private subroutine wrap_json_update_integer(json, p, name, val, found)

Alternate version of json_update_integer, where name is kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CDK,len=*), intent(in) :: name
integer(kind=IK), intent(in) :: val
logical(kind=LK), intent(out) :: found

private subroutine wrap_json_update_logical(json, p, name, val, found)

Alternate version of json_update_logical, where name is kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CDK,len=*), intent(in) :: name
logical(kind=LK), intent(in) :: val
logical(kind=LK), intent(out) :: found

private subroutine wrap_json_update_string(json, p, name, val, found)

Alternate version of json_update_string, where name and value are kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CDK,len=*), intent(in) :: name
character(kind=CDK,len=*), intent(in) :: val
logical(kind=LK), intent(out) :: found

private subroutine wrap_json_value_add_double(json, p, name, val)

Alternate version of json_value_add_double where name is kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CDK,len=*), intent(in) :: name

variable name

real(kind=RK), intent(in) :: val

real value

private subroutine wrap_json_value_add_double_vec(json, p, name, val)

Alternate version of json_value_add_double_vec where name is kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CDK,len=*), intent(in) :: name
real(kind=RK), intent(in), dimension(:):: val

private subroutine wrap_json_value_add_integer(json, p, name, val)

Alternate version of json_value_add_integer where name is kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CDK,len=*), intent(in) :: name

name of the variable

integer(kind=IK), intent(in) :: val

value

private subroutine wrap_json_value_add_integer_vec(json, p, name, val)

Alternate version of json_value_add_integer_vec where name is kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CDK,len=*), intent(in) :: name

name of the variable

integer(kind=IK), intent(in), dimension(:):: val

value

private subroutine wrap_json_value_add_logical(json, p, name, val)

Alternate version of json_value_add_logical where name is kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CDK,len=*), intent(in) :: name

name of the variable

logical(kind=LK), intent(in) :: val

value

private subroutine wrap_json_value_add_logical_vec(json, p, name, val)

Alternate version of json_value_add_logical_vec where name is kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CDK,len=*), intent(in) :: name

name of the variable

logical(kind=LK), intent(in), dimension(:):: val

value

private subroutine wrap_json_value_add_null(json, p, name)

Alternate version of json_value_add_null where name is kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CDK,len=*), intent(in) :: name

name of the variable

private subroutine wrap_json_value_add_string(json, p, name, val)

Alternate version of json_value_add_string where name and val are kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CDK,len=*), intent(in) :: name

name of the variable

character(kind=CDK,len=*), intent(in) :: val

value

private subroutine wrap_json_value_add_string_vec(json, p, name, val, trim_str, adjustl_str)

Alternate version of json_value_add_string_vec where name and val are kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CDK,len=*), intent(in) :: name
character(kind=CDK,len=*), intent(in), dimension(:):: val
logical(kind=LK), intent(in), optional :: trim_str
logical(kind=LK), intent(in), optional :: adjustl_str

private subroutine wrap_json_value_create_array(json, p, name)

Author
Izaak Beekman

A wrapper for json_value_create_array so that create_array method may be called with an actual argument, corresponding to the dummy argument name, that is either of 'DEFAULT' or 'ISO_10646' character kind.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CDK,len=*), intent(in) :: name

private subroutine wrap_json_value_create_double(json, p, val, name)

Author
Izaak Beekman

A wrapper for json_value_create_double so that create_double method may be called with an actual argument corresponding to the dummy argument, name that may be of 'DEFAULT' or 'ISO_10646' character kind.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
real(kind=RK), intent(in) :: val
character(kind=CDK,len=*), intent(in) :: name

private subroutine wrap_json_value_create_integer(json, p, val, name)

Author
Izaak Beekman

A wrapper procedure for json_value_create_integer so that create_integer method may be called with either a 'DEFAULT' or 'ISO_10646' character kind name actual argument.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
integer(kind=IK), intent(in) :: val
character(kind=CDK,len=*), intent(in) :: name

private subroutine wrap_json_value_create_logical(json, p, val, name)

Author
Izaak Beekman

Wrapper for json_value_create_logical so create_logical method can be called with name of character kind 'DEFAULT' or 'ISO_10646'

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
logical(kind=LK), intent(in) :: val
character(kind=CDK,len=*), intent(in) :: name

private subroutine wrap_json_value_create_null(json, p, name)

Author
Izaak Beekman

Wrap json_value_create_null so that create_null method may be called with an actual argument corresponding to the dummy argument name that is either of 'DEFAULT' or 'ISO_10646' character kind.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CDK,len=*), intent(in) :: name

private subroutine wrap_json_value_create_object(json, p, name)

Author
Izaak Beekman

Wrap json_value_create_object so that create_object method may be called with an actual argument corresponding to the dummy argument name that is of either 'DEFAULT' or 'ISO_10646' character kind.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CDK,len=*), intent(in) :: name

private subroutine wrap_json_value_create_string(json, p, val, name)

Author
Izaak Beekman

Wrap json_value_create_string so that create_string method may be called with actual character string arguments for name and val that are BOTH of 'DEFAULT' or 'ISO_10646' character kind.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CDK,len=*), intent(in) :: val
character(kind=CDK,len=*), intent(in) :: name

private subroutine wrap_json_value_get_by_name_chars(json, p, name, child)

Alternate version of json_value_get_by_name_chars where name is kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), intent(in), pointer:: p
character(kind=CDK,len=*), intent(in) :: name
type(json_value), pointer:: child

private subroutine wrap_json_value_remove_if_present(json, p, name)

Alternate version of json_value_remove_if_present, where name is kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), pointer:: p
character(kind=CDK,len=*), intent(in) :: name

private subroutine wrap_json_value_rename(json, p, name)

Author
Jacob Williams
Date
4/29/2016

Alternate version of json_value_rename, where name is kind=CDK.

Arguments

Type IntentOptional AttributesName
class(json_core), intent(inout) :: json
type(json_value), intent(in), pointer:: p
character(kind=CDK,len=*), intent(in) :: name

new variable name