JSON Lexer
This package provides an implementation of a JSON lexer and pretty printer, suitable for implementing text highlighting and formatting functionality.
1 Lexer
(require json/lexer) | package: json-lexer-lib |
struct
(struct token (type str val line col pos) #:extra-constructor-name make-token #:prefab) type : symbol? str : string? val : any/c line : (or/c #f exact-positive-integer?) col : (or/c #f exact-nonnegative-integer?) pos : exact-nonnegative-integer?
procedure
(make-lexer in [ #:partial-strings? partial-strings?]) → lexer? in : input-port? partial-strings? : boolean? = #f
> (require json/lexer) > (define inp (open-input-string "[1, 2, true, {}]")) > (port-count-lines! inp) > (define l (make-lexer inp))
> (let loop () (define t (lexer-take l)) (unless (eq? (token-type t) 'eof) (println t) (loop)))
'#s(token lsqbrace "[" "[" 1 0 1)
'#s(token number "1" 1 1 1 2)
'#s(token comma "," "," 1 2 3)
'#s(token whitespace " " " " 1 3 4)
'#s(token number "2" 2 1 4 5)
'#s(token comma "," "," 1 5 6)
'#s(token whitespace " " " " 1 6 7)
'#s(token keyword "true" #t 1 7 8)
'#s(token comma "," "," 1 11 12)
'#s(token whitespace " " " " 1 12 13)
'#s(token lcubrace "{" "{" 1 13 14)
'#s(token rcubrace "}" "}" 1 14 15)
'#s(token rsqbrace "]" "]" 1 15 16)
procedure
(lexer-peek l) → token?
l : lexer?
procedure
(lexer-take l) → token?
l : lexer?
2 Pretty Printer
(require json/pretty) | package: json-lexer-lib |
procedure
(pretty-print-json in [out #:width width]) → void?
in : (or/c string? input-port?) out : output-port? = (current-output-port) width : exact-positive-integer? = 2
The width parameter controls the number of spaces used per indentation depth.
> (require json/pretty) > (pretty-print-json "[1, 2, {}, {\"a\": 1.5e+10, \"b\": []}]")
[
1,
2,
{},
{
"a": 1.5e+10,
"b": []
}
]
> (pretty-print-json "1 2 3 [] [\"\\u03bbambda\"]")
1 2 3 [] [
"\u03bbambda"
]