RosettaCodeData/Task/JSON/EchoLisp/json.l

35 lines
1.4 KiB
Common Lisp

;; JSON standard types : strings, numbers, and arrays (vectors)
(export-json #(6 7 8 9)) "[6,7,8,9]"
(export-json #("alpha" "beta" "gamma")) "["alpha","beta","gamma"]"
(json-import "[6,7,8,9]") #( 6 7 8 9)
(json-import #<< ["alpha","beta","gamma"] >>#) #( "alpha" "beta" "gamma")
;; EchoLisp types : dates, rational, complex, big int
(export-json 3/4) "{"_instanceof":"Rational","a":3,"b":4}"
(json-import #<< {"_instanceof":"Rational","a":666,"b":42} >>#) 111/7
;; Symbols
(export-json 'Simon-Gallubert) "{"_instanceof":"Symbol","name":"Simon-Gallubert"}"
(json-import #<< {"_instanceof":"Symbol","name":"Antoinette-de-Gabolde"} >>#)
Antoinette-de-Gabolde
;; Lists
(define my-list
(export-json '( 43 4 5 ( 6 7 ( 8 9 )))))
"{"_instanceof":"List" ,"array":[43,4,5,{"_instanceof":"List",
"array":[6,7,{"_instanceof":"List",
"array":[8,9],"circular":false}],"circular":false}],"circular":false}"
(json-import my-list) (43 4 5 (6 7 (8 9)))
;; Structures
(struct Person (name pict)) #struct:Person [name pict]
(define antoinette (Person "antoinette" "👰")) # (antoinette 👰)
(export-json antoinette)
"{"_instanceof":"Struct", "struct":"Person","id":17,"fields":["antoinette","👰"]}"
(json-import
#<< {"_instanceof":"Struct","struct":"Person","id":18,"fields":["simon","🎩"]} >>#)
# (simon 🎩)