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"