1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
#+TITLE: JSON meta library
* What is a meta library?
The purpose of this library is to be a portable shim for many JSON libraries.
* Why?
If one wants to write portable Scheme which does some JSON processing, one must either:
- Abandon hope of being portable, and depend on an implementation specific library.
- Use a portable JSON library which is redundant, and may conflict with other libraries that expect parsed JSON to be represented in a certain way.
- Write a bunch of cond-expands to act as a portability layer, and use different JSON libraries in different contexts.
This library aims to be an implementation of the latter which you can just plug in as a dependency, instead of writing your own.
* API
** Constructors
~(json-object pairs ...)~:
Constructs a new JSON object.
pairs are ~pair?~ objects with a ~string?~ as the ~car~, and a ~json-value?~ as the ~cdr~.
An alist can be converted to a JSON object like so: ~(apply json-object alist)~
~(json-list objs ...)~:
Constructs a new JSON list.
objs are ~json-value?~ objects.
A list can be converted to a JSON list like so: ~(apply json-list some-list)~
~json-null~:
This is not a constructor, but instead it is a value which represents null in JSON.
** Predicates
~(json-value? obj)~:
Returns true if ~obj~ is a value that can be serialized as JSON.
This is true for values related to the constructors, and for numbers, strings, and booleans.
~(json-object? obj)~:
Returns true if ~obj~ is a value that can be serialized as a JSON object.
Either the result of deserializing a string formatted as a JSON object, or from the ~json-object~ constructor.
~(json-list? obj)~:
Returns true if ~obj~ is a value that can be serialized as a JSON list.
Either the result of deserializing a string formatted as a JSON list, or from the ~json-list~ constructor.
~(json-null? obj)~:
Returns true if ~obj~ is ~eq?~ to ~json-null~.
** Serialization
~(json->string obj)~:
Convert a ~json-value?~ to a JSON formatted ~string?~.
~(string->json str)~
Converts a ~string?~ into a ~json-value?~
** Selectors
~(json-object-ref obj key)~:
Returns the ~json-value?~ associated with ~key~ in ~obj~.
~key~ should be a ~string?~, and the behavior when ~obj~ does not contain ~key~ is currently undefined.
~(json-list-ref lst i)~:
Returns the ~json-value?~ at index ~i~
** Conversion
~(json-object->alist obj)~:
Convert ~obj~ to a ~list?~ of ~pair?~ where the ~car~ of each pair is a ~string?~ and the ~cdr~ is the associated ~json-value?~.
~(json-object->list lst)~:
Convert ~lst~ to a ~list?~ of ~json-value?~.
|