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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
(load "../common")
(mtest
#J0 0.0
#J"abc" "abc"
#Jtrue t
#Jfalse nil
#Jnull null)
(mtest
#J1 1.0
#J 1 1.0
#J123 123.0
#J0.123 0.123
#J1.123 1.123
#J1E3 1000.0
#J1.1E3 1100.0
#J1.1E+3 1100.0
#J1.1E+03 1100.0
#J1.1e3 1100.0
#J1.1e+3 1100.0
#J1.1e+03 1100.0)
(mtest
#J"" ""
#J"\u0000" "\xdc00"
#J"\u0001" "\x1"
#J"\ud801\udc37" "\x10437"
#J"a\u0000b" "a\xdc00;b"
#J"a\u0001b" "a\x1;b"
#J"a\ud801\udc37b" "a\x10437;b"
#J"\b\t\n\f\r" "\b\t\n\f\r"
#J"\/\\\"" "/\\\"")
(mtest
#J[] #()
#J[ ] #()
#J[ ] #()
#J [ ] #()
#J[null] #(null)
#J[false] #(nil)
#J[true] #(t)
#J["abc"] #("abc")
#J[1,2,3] #(1.0 2.0 3.0)
#J[ 1 , 2 , 3 ] #(1.0 2.0 3.0)
#J[[]] #(#())
#J[[],[]] #(#() #())
#J[ [] , [] ] #(#() #())
#J[[1],[2],3] #(#(1.0) #(2.0) 3.0))
(mtest
#J{} #H(())
#J{ } #H(())
#J{ } #H(())
#J { } #H(())
#J{true:true} #H(() (t t)))
#J{ true : true } #H(() (t t))
#J{ {} : {} } #H(() (#H(()) #H(())))
#J{ "a" : 1.0 } #H(() (a 1.0))
#J{ "a" : 1.0, "b" : [null] } #H(() (a 1.0) (b #(null)))
(let ((*print-circle* t))
(mstest
#J[#1="abc", #1#] "#(#1=\"abc\" #1#)"
#2=#J[1, #2#] "#1=#(1.0 #J#1#)"
#J#3=[1, #3#] "#1=#(1.0 #1#)"
#4=#J{#4#:#4#} "#1=#H(() (#2=#J#1# #2#))"
#J#5={#5#:#5#} "#1=#H(() (#1# #1#))")
(let ((chash #J{"foo":#6="bar", "xyzzy":#6#}))
(mtest
[chash "xyzzy"] "bar"
(eq [chash "foo"] [chash "xyzzy"]) t)))
(mtest
^#J~(+ 1.0 1) #J2
^#J[1, ~(+ 2.0 2)] #J[1, 4]
^#J[1, ~(+ 2.0 2), 3] #J[1, 4, 3]
(eval ^^#J~#(1.0 ,*(list 2.0 3.0) 4.0)) #J[1, 2, 3, 4]
^#J[1, ~*(list 2.0 3.0), 4] #J[1, 2, 3, 4]
#J^[1, ~(+ 2.0 2)] #(1.0 4.0)
#J^[1, ~(+ 2.0 2), 3] #(1.0 4.0 3.0)
^#J{~(join "abc" "def") : "ghi"} #J{"abcdef":"ghi"}
#J^{~(join "abc" "def") : "ghi"} #H(() ("abcdef" "ghi")))
(mtest
(get-json "0") 0.0
(get-json "\"abc\"") "abc"
(get-json "true") t
(get-json "false") nil
(get-json "null") null)
(test
(tojson #(1.0 "abc" t)) "[1,\"abc\",true]")
(mtest
(get-jsons "") nil
(get-jsons "true") (t)
(get-jsons "1 1 [2] {3:4}") (1.0 1.0 #(2.0) #H(() (3.0 4.0))))
(mtest
(with-out-string-stream (s) (put-json nil s)) "false"
(with-out-string-stream (s) (put-jsons nil s)) ""
(with-out-string-stream (s) (put-jsons '(1.0 t nil) s)) "1\ntrue\nfalse\n")
(with-temp-file (name s "json")
(mtest
(file-put-json name #(1.0 2.0 3.0)) t
(file-get-string name) "[1,2,3]\n"
(file-get-json name) #(1.0 2.0 3.0)
(file-append-json name #H(() ("a" t))) t
(file-get-string name) "[1,2,3]\n{\"a\":true}\n"
(file-get-jsons name) (#(1.0 2.0 3.0)
#H(() ("a" t)))
(file-put-jsons name '(1.0 t null)) t
(file-get-jsons name) (1.0 t null)
(file-get-string name) "1\ntrue\nnull\n"
(command-put-json `cat > @name` #(#() #())) t
(file-get-string name) "[[],[]]\n")
(command-get-json `cat @name`) #(#() #())
(command-put-jsons `cat > @name` '(#() 1.0 nil)) t
(file-get-string name) "[]\n1\nfalse\n"
(command-get-jsons `cat @name`) '(#() 1.0 nil))
|