Skip to content

Commit 9feba7f

Browse files
authored
JSON-GET indexes arrays with integer attributes (#2140)
1 parent c1c2c75 commit 9feba7f

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

lispusers/JSON

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
22

3-
(FILECREATED "13-May-2024 22:37:13" {WMEDLEY}<lispusers>JSON.;36 9198
3+
(FILECREATED " 7-May-2025 13:57:04" {WMEDLEY}<lispusers>JSON.;38 9891
44

55
:EDIT-BY rmk
66

77
:CHANGES-TO (FNS JSON-GET)
88

9-
:PREVIOUS-DATE "13-May-2024 19:23:02" {WMEDLEY}<lispusers>JSON.;33)
9+
:PREVIOUS-DATE "13-May-2024 22:37:13" {WMEDLEY}<lispusers>JSON.;36)
1010

1111

1212
(PRETTYCOMPRINT JSONCOMS)
@@ -177,14 +177,24 @@
177177
NIL])
178178

179179
(JSON-GET
180-
[LAMBDA (OBJECT ATTRIBUTES) (* ; "Edited 13-May-2024 22:35 by rmk")
180+
[LAMBDA (OBJECT ATTRIBUTES) (* ; "Edited 7-May-2025 13:56 by rmk")
181+
(* ; "Edited 13-May-2024 22:35 by rmk")
181182
(* ; "Edited 30-Apr-2024 14:26 by rmk")
182183

183184
(* ;; "Returns the value at the end of a chain of ATTRIBUTES in OBJECT")
184185

185-
(for A (OBJ _ OBJECT) inside ATTRIBUTES do (if (EQ 'OBJECT (CAR (LISTP OBJ)))
186-
then [SETQ OBJ (CADR (ASSOC A (CDR OBJ]
187-
else (RETURN NIL)) finally (RETURN OBJ])
186+
(for A (OBJ _ OBJECT) inside ATTRIBUTES do (SELECTQ (CAR (LISTP OBJ))
187+
(OBJECT [SETQ OBJ (CADR (ASSOC A (CDR OBJ])
188+
(ARRAY (CL:UNLESS (AND (FIXP A)
189+
(IGEQ A 0))
190+
(ERROR A
191+
" cannot index a JSON array")
192+
)
193+
194+
(* ;; "ADD1 because zero-origin")
195+
196+
[SETQ OBJ (CAR (NTH OBJ (ADD1 A])
197+
(RETURN NIL)) finally (RETURN OBJ])
188198
)
189199
(DECLARE%: EVAL@COMPILE DONTCOPY
190200
(DECLARE%: EVAL@COMPILE
@@ -201,7 +211,7 @@
201211
)
202212
)
203213
(DECLARE%: DONTCOPY
204-
(FILEMAP (NIL (559 8839 (JSON-PARSE 569 . 915) (JSON-VALUE 917 . 1286) (JSON-SKIP 1288 . 1562) (
214+
(FILEMAP (NIL (559 9532 (JSON-PARSE 569 . 915) (JSON-VALUE 917 . 1286) (JSON-SKIP 1288 . 1562) (
205215
JSON-STRING 1564 . 2362) (JSON-ARRAY 2364 . 3502) (JSON-OBJECT 3504 . 4961) (JSON-AVPAIR 4963 . 5405)
206-
(JSON-NUMBER 5407 . 6921) (JSON-ATOM 6923 . 8230) (JSON-GET 8232 . 8837)))))
216+
(JSON-NUMBER 5407 . 6921) (JSON-ATOM 6923 . 8230) (JSON-GET 8232 . 9530)))))
207217
STOP

lispusers/JSON.LCOM

99 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)