(import (text json) (srfi 1) (srfi 2)) (begin (define (json-object . pairs) (if (eq? (*json-map-type*) 'vector) (apply vector pairs) (apply list pairs))) (define (json-list . objs) (if (eq? (*json-map-type*) 'vector) (apply list objs) (apply vector objs))) (define json-null 'null) (define (json-object? json) (if (eq? (*json-map-type*) 'vector) (vector? json) (list? json))) (define (json-list? json) (if (eq? (*json-map-type*) 'vector) (list? json) (vector? json))) (define (json-null? obj) (eq? obj json-null)) (define (json-object-contains-key? obj key) (and (assoc key (json-object->alist obj)) #t)) (define (string->json str) (call-with-port (open-input-string str) (lambda (port) (json-read port)))) (define (json->string json) (call-with-port (open-output-string) (lambda (port) (json-write json port) (get-output-string port)))) (define (json-object-ref json key) (or (and-let* ((pair (assoc key (json-object->alist json)))) (cdr pair)) ((json-key-not-found)))) (define (json-list-ref json index) (list-ref (json-list->list json) index)) (define (json-list-length json) (if (eq? (*json-map-type*) 'vector) (length json) (vector-length json))) (define (json-object->alist json) (if (eq? (*json-map-type*) 'vector) (vector->list json) json)) (define (json-list->list json) (if (eq? (*json-map-type*) 'vector) json (vector->list json))))