Neil Van Dyke
→(list/c(or/cexact-positive-integer?#f)(or/cexact-nonnegative-integer?#f)(or/cexact-positive-integer?#f))exn:exn:fail:invalid-json?
syntax
#:error-nameerror-name-symbol#:visit-object-startvisit-object-start-proc#:visit-object-endvisit-object-end-proc#:visit-member-startvisit-member-start-proc#:visit-member-endvisit-member-end-proc#:visit-array-startvisit-array-start-proc#:visit-array-endvisit-array-end-proc#:visit-stringvisit-string-proc#:visit-numbervisit-number-proc#:visit-constantvisit-constant-proc)
(inseedexhaust?)
(definemy-json-to-sjson(json-fold-lambda#:error-name'my-json-to-sjson#:visit-object-start(lambda(seed)(make-hasheq))#:visit-object-end(lambda(seedparent-seed)`(,seed,@parent-seed))#:visit-member-start(lambda(nameseed)'())#:visit-member-end(lambda(nameseedparent-seed)(hash-set!parent-seed(string->symbolname)(carseed))parent-seed)#:visit-array-start(lambda(seed)'())#:visit-array-end(lambda(seedparent-seed)`(,(reverseseed),@parent-seed))#:visit-string(lambda(strseed)`(,str,@seed))#:visit-number(lambda(numseed)`(,num,@seed))#:visit-constant(lambda(nameseed)`(,(casename((true)#t)((false)#f)((null)#\nul)(else(error'my-json-to-sjson"invalid constant ~S"name))),@seed))))
procedure
#:visit-object-startvisit-object-start#:visit-object-endvisit-object-end#:visit-member-startvisit-member-start#:visit-member-endvisit-member-end#:visit-array-startvisit-array-start#:visit-array-endvisit-array-end#:visit-stringvisit-string#:visit-numbervisit-number#:visit-constantvisit-constant)→(->*((or/cinput-port?string?)any/c)(#:exhaust?boolean?)any)error-name:symbol?='<make-json-fold>visit-object-start:(->any/cany/c)visit-object-end:(->any/cany/cany/c)visit-member-start:(->symbol?any/cany/c)visit-member-end:(->symbol?any/cany/cany/c)visit-array-start:(->any/cany/c)visit-array-end:(->any/cany/cany/c)visit-string:(->string?any/cany/c)visit-number:(->number?any/cany/c)visit-constant:(->symbol?any/cany/c)
seed:any/cseed:any/cparent-seed:any/cname:symbol?seed:any/cname:symbol?seed:any/cparent-seed:any/cseed:any/cseed:any/cparent-seed:any/cstr:string?seed:any/cnum:number?seed:any/cname:symbol?seed:any/c
in:(or/cinput-port?string?)exhaust?:boolean?=#t
in:(or/cinput-port?string?)exhaust?:boolean?=#t
in:(or/cinput-port?string?)exhaust?:boolean?=#tout:output-port?=(current-output-port)
in:(or/cinput-port?string?)exhaust?:boolean?=#t
Tweaked info.rkt, filenames.
Fixed deps.
Moving from PLaneT to new package system.
Moved unit tests to main source file.
Converted to McFly and Overeasy.
Added json-to-sjson-visit- procedures.
Documentation fix.
Added missing export.
Initial release.
Copyright 2010–2012, 2016 Neil Van Dyke. This program is Free Software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. See http://www.gnu.org/licenses/ for details. For other licenses and consulting, please contact the author.