Degenerate Conic

Algorithms • Modern Fortran Programming • Orbital Mechanics

Jun 13, 2021

JSON

json-fortran-logo

There are a lot a JSON libraries available for Fortran nowadays. The complete list, as far as I know is:

  • fson Fortran 95 JSON Parser. JSON-Fortran is a fork of this library. (started 2012).
  • YAJL-Fort A Modern Fortran Interface to YAJL. This one is an interface to a C library, and not pure Fortran. See also petaca. (started 2013).
  • JSON-Fortran A Fortran 2008 JSON API. This is my library. As far as I know, this was the first production-ready JSON parser written in modern Fortran. (started 2014).
  • fortjson JSON library written in Fortran 2003. Designed with portability across HPC architectures in mind. (started 2018).
  • jsonff JSON for Fortran. (started 2019).

Example

Here's an example of using JSON-Fortran to read in some data from a JSON string:

program test

 use json_module, wp => json_RK, ip => json_IK

 implicit none

 type(json_file) :: json
 integer(ip) :: t
 real(wp),dimension(:),allocatable :: x

 call json%deserialize('{"t": 1, "x": [2.0, 3.0, 4.0]}')

 call json%get('t', t); write(*,*) t
 call json%get('x', x); write(*,*) x

end program test

This prints:

           1
   2.00000000000000        3.00000000000000        4.00000000000000

Note that JSON-Fortran has all sorts of options for:

  • Using different real (real32, real64, and real128) and integer kinds (int8, int16, int32, and int64).
  • Controlling the JSON format for printing, including number of spaces for indenting, printing vectors on one line only, or full minification with no extra whitespace or line breaks.
  • Support for comments in a JSON file.
  • Multiple ways to get data from a JSON structure, such as RFC 6901 "JSON Pointer" paths or JSONPath) "bracket-notation".
  • Graceful handing of unusual inputs such as NaN or Infinity.
  • Thread safe error handling.

See also