dependencies:
|
[Dependency "base" [[VGte "3.0.0",VLt "4.0.0"]],Dependency "det-parse" [[VGte "3.0.0",VLt "4.0.0"]],Dependency "wl-pprint" [[VGte "3.0.0",VLt "4.0.0"]]]
|
documentation:
|
# JSON
This package provides data types, a parser and a pretty printer for [JSON][1].
## Representing JSON values in Curry
A JSON value can be a primitive, i.e. `true`, `false`, `null`, a string or a
number, an array of JSON values or an object mapping strings to JSON values. In
Curry, a JSON value is represented by the data type `JValue` from the
`JSON.Data` module:
```haskell
data JValue = JTrue
| JFalse
| JNull
| JString String
| JNumber Float
| JArray [JValue]
| JObject [(String, JValue)]
```
## Parsing JSON strings
`parseJSON` from `JSON.Parser` can be used to parse a JSON string into a
`JValue`:
```haskell
> parseJSON "{ \"hello\": [\"world\", \"kiel\"] }"
Just (JObject [("hello", JArray [JString "world", JString "kiel"])])
```
## Printing JSON strings
`ppJSON` from `JSON.Pretty` will turn a `JValue` into a pretty printed string.
If you want more control over the layout of the resulting string, you can use
`ppJValue` from the same value to obtain a `Doc` for Curry's `Pretty` module
from a `JValue`.
## Converting to and from JSON
The module `JSON.Convert` defines a defines a type class `ConvertJSON`
and various instances for standard types to convert Curry values to JSON values
and vice versa.
As apparent from these instance definitions, it is quite easy to
define instances for other user-defined data types.
[1]: http://www.json.org
|