json-builder-0.2.0: Data structure agnostic JSON serialization

MaintainerLeon P Smith <leon@melding-monads.com>

Data.Json.Builder

Description

Data structure agnostic JSON serialization

Synopsis

Documentation

class Value a whereSource

The Value typeclass represents types that can be rendered into valid json syntax.

Methods

toJson :: a -> JsonSource

Instances

data Json Source

The Json type represents valid json syntax. It cannot be directly analyzed, however it can be rendered into a ByteString and used to as a component of an array or an object to build a bigger json value.

Instances

data Array Source

The Array type represents syntax for a json array. It has been given a singleton constructor element and an instance of Monoid, so that mempty represents the empty array and mappend concatinates two arrays. Arbitrary arrays can be constructed using these operators.

Instances

element :: Value a => a -> ArraySource

The element function constructs a json array consisting of exactly one value. These arrays can be concatinated using mappend.

data Object Source

The Object type represents syntax for a json object. It has a singleton constructor row, and an instance of Monoid, so that mempty represents the empty object and mappend concatinates two objects. Arbitrary objects can be constructed using these operators.

Note that duplicate field names will appear in the output, so it is up to the user of this interface to avoid duplicate field names.

row :: (JsString k, Value a) => k -> a -> ObjectSource

The row function constructs a json object consisting of exactly one field. These objects can be concatinated using mappend.

class Value a => JsString a whereSource

The String typeclass represents types that render into json string syntax. They are special because only strings can appear as field names of json objects.

Methods

escape :: a -> EscapedSource

Instances

JsString Text 
JsString Text 
JsString ByteString

must be UTF-8 encoded

JsString ByteString

must be UTF-8 encoded

JsString Escaped 
JsString [Char] 

data Escaped Source

The Escaped type represents json string syntax. The purpose of this type is so that json strings can be efficiently constructed from multiple Haskell strings without superfluous conversions or concatinations.

Internally, it is just a Builder value which must produce a UTF-8 encoded bytestring with backslashes, quotes, and control characters appropriately escaped. It also must not render the opening or closing quote, which are instead rendered by toJson.

class JsArray a whereSource

Methods

toArray :: a -> ArraySource

Instances

Value a => JsArray [a] 

class JsObject a whereSource

Methods

toObject :: a -> ObjectSource

Instances

(JsString k, Value a) => JsObject (Map k a) 
(JsString k, Value a) => JsObject (HashMap k a)