Giter VIP home page Giter VIP logo

guile-json-1's Introduction

guile-json

guile-json is a JSON module for Guile. It supports parsing and building JSON documents according to the http://json.org specification. These are the main features:

  • Strictly complies to http://json.org specification.
  • Build JSON documents programmatically via macros.
  • Basic unicode support for strings.
  • Allows JSON pretty printing.

Installation

guile-json is freely available for download under the terms of the GNU Lesser General Public License version 3 (LGPLv3+).

Download the latest tarball and untar it:

Then, run the typical sequence:

$ ./configure --prefix=<guile-prefix>
$ make
$ sudo make install

Where <guile-prefix> should preferably be the same as your system Guile installation directory (e.g. /usr).

If everything installed successfully you should be up and running:

$ guile
scheme@(guile-user)> (use-modules (json))
scheme@(guile-user)> (scm->json (json (array 1 2 3)))
[1, 2, 3]

It might be that you installed guile-json somewhere differently than your system’s Guile. If so, you need to indicate Guile where to find guile-json, for example:

$ GUILE_LOAD_PATH=/usr/local/share/guile/site guile

A pkg-list.scm file is also provided for users of the Guildhall/Dorodango packaging system.

Usage

guile-json provides a few procedures to parse and build a JSON document. A JSON document is transformed into or from native Guile values according to the following table:

JSONGuile
stringstring
numbernumber
objecthash-table
arraylist
true#t
false#f
null#nil

To start using guile-json procedures and macros you first need to load the module:

scheme@(guile-user)> (use-modules (json))

Procedures

  • (json->scm #:optional port) : Reads a JSON document from the given port, or from the current input port if none is given.
    • port : is optional, it defaults to the current input port.
  • (json-string->scm str) : Reads a JSON document from the given string.
  • (scm->json native #:optional port #:key escape pretty) : Creates a JSON document from the given native Guile value. The JSON document is written into the given port, or to the current output port if non is given.
    • port : it defaults to the current output port.
    • escape : if true, the slash (/ solidus) character will be escaped.
    • pretty : if true, the JSON document will be pretty printed.
  • (scm->json-string native #:key escape pretty) : Creates a JSON document from the given native Guile value into a string.
    • escape : if true, the slash (/ solidus) character will be escaped.
    • pretty : if true, the JSON document will be pretty printed.

Exceptions

A json-invalid exception is thrown if an error is found during the JSON parsing. Since version 0.2.0, the json-invalid exception has a single parser argument (see predicate and accessors below). The line or column where the error occured can be easily obtained from the parser port (calling port-line or port-column on the port).

  • (json-parser? parser) : Tells whether the given argument is a JSON parser record type.
  • (json-parser-port parser) : Get the port that the parser was reading from.

Macros

It is also possible to build JSON documents programmatically using the main json macro (and object and array). Here are some examples:

  • Build the string “hello world”:
    scheme@(guile-user)> (scm->json (json "hello world"))
    "hello world"
        
  • Build the [1, 2, 3] array:
    scheme@(guile-user)> (scm->json (json (array 1 2 3)))
    [1, 2, 3]
        
  • Build the [1, 2, 3, 4] array using unquote-splicing:
    scheme@(guile-user)> (define values '(2 3))
    scheme@(guile-user)> (scm->json (json (array 1 ,@values 4)))
    [1, 2, 3, 4]
        
  • Build the object { “project” : “foo”, “author” : “bar” }:
    scheme@(guile-user)> (scm->json (json (object ("project" "foo")
                                                  ("author" "bar"))))
    {"author" : "bar", "project" : "foo"}
        
  • Build the object { “values” : [ 234, 98.56 ] }:
    scheme@(guile-user)> (scm->json (json (object ("values" (array 234 98.56)))))
    {"values" : [234, 98.56]}
        
  • Build the object { “values” : [ 234, 98.56 ] } again, this time using a variable:
    scheme@(guile-user)> (define values '(234 98.56))
    scheme@(guile-user)> (scm->json (json (object ("values" ,values))))
    {"values" : [1, 2, 3]}
        

guile-json-1's People

Contributors

aconchillo avatar davexunit avatar ijp avatar janneke avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.