From 704a9963a1c10b311539837250adc2a0a95d5b62 Mon Sep 17 00:00:00 2001 From: Jason Staten Date: Tue, 15 Oct 2019 11:28:40 -0600 Subject: [PATCH] JSON dsl --- io/JSON.io | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ io/dsl.io | 4 ++++ 2 files changed, 58 insertions(+) create mode 100644 io/JSON.io create mode 100644 io/dsl.io diff --git a/io/JSON.io b/io/JSON.io new file mode 100644 index 0000000..3b97203 --- /dev/null +++ b/io/JSON.io @@ -0,0 +1,54 @@ +Json := Object clone do( + + squareBrackets := method( + l := list() + l appendProto(Json) + call message arguments foreach(arg, + a := Json doMessage(arg) + l push(a) + ) + l + ) + + curlyBrackets := method( + map := Map clone + map appendProto(Json) + map colon := method(key, value, + cleanKey := key asMutable removePrefix("\"") removeSuffix("\"") + self atPut(cleanKey,value) + ) + call message arguments foreach(arg, + map doMessage(arg) + ) + + map + ) +) + +j := Json { + "name": "alice", + "job": "agent", + "aliases": [ + "tanya", + "isla" + ], + "neste": [ + "tanya", + "isla" + ] +} + +k := Json [ + {"name": "ted", "age": 22}, + {"name": "sue", "age": 31} +] + +q := Json [ + ["so", ["nested"]] +] + +j at("name") println +j at("aliases") println +k at(0) at("age") println + +q println diff --git a/io/dsl.io b/io/dsl.io new file mode 100644 index 0000000..c81d4bf --- /dev/null +++ b/io/dsl.io @@ -0,0 +1,4 @@ +# OperatorTable additions must be files using it load!! +OperatorTable addAssignOperator(":", "colon") + +Json # Automatically loads "Json.io"