21
JPL: The JSON Programming Language
(github.com)
Examples from the README
example 1
[
{ "let": { "name": "JSON", "times": 3 } },
{
"for": {
"var": "i",
"from": 1,
"to": "times",
"do": [
{ "print": { "add": ["Hello ", "name"] } }
]
}
}
]
example 2
[
{ "import": "system.jpl" },
{ "print": { "call": { "now": [] } } },
{ "print": { "call": { "osName": [] } } },
{ "print": { "call": { "cpuCount": [] } } },
{ "let": { "a": 9, "b": 4, "name": "JPL" } },
{ "print": { "add": ["\"a + b = \"", { "add": ["a", "b"] }] } },
{ "print": { "mul": ["a", "b"] } },
{ "print": { "div": ["a", "b"] } },
{ "print": { "mod": ["a", "b"] } },
{ "print": { "&": [6, 3] } },
{ "print": { "||": [false, true] } },
{ "print": { "gt": ["a", "b"] } },
{ "def": { "sq": { "params": ["x"], "body": [{ "return": { "mul": ["x", "x"] } }] } } },
{ "print": { "call": { "sq": [5] } } },
{ "def": { "greet": { "params": ["who"], "body": [{ "return": { "add": ["\"Hi, \"", "who"] } }] } } },
{ "print": { "call": { "greet": ["\"JSON Fan\""] } } },
{ "if": { "cond": { "<": ["b", "a"] }, "then": { "print": "\"b < a ๐\"" }, "else": { "print": "\"b >= a ๐ค\"" } } },
{ "for": { "var": "i", "from": 1, "to": 3, "step": 1, "do": [ { "print": { "call": { "sq": ["i"] } } } ] } },
{ "print": "\"All features in one! ๐\"" }
]
example 3
[
// ๐ Welcome to JPL โ JSON Programming Language!
// Import system utilities for fun stuff
{ "import": "system.jpl" },
// Print system info
{ "print": { "call": { "now": [] } } },
{ "print": { "call": { "osName": [] } } },
{ "print": { "call": { "cpuCount": [] } } },
// Define a math function to square a number
{
"def": {
"square": {
"params": ["x"],
"body": [
{ "return": { "mul": ["x", "x"] } }
]
}
}
},
// Greet a user
{
"def": {
"greet": {
"params": ["name"],
"body": [
{ "return": { "add": ["Hello, ", "name"] } }
]
}
}
},
// Declare variables
{ "let": { "a": 7, "user": "Kapil" } },
// Use greet function and print
{ "print": { "call": { "greet": ["user"] } } },
// Conditional message
{
"if": {
"cond": { ">": ["a", 5] },
"then": { "print": "a is greater than 5" },
"else": { "print": "a is 5 or less" }
}
},
// Loop with break and continue
{
"for": {
"var": "i",
"from": 1,
"to": 10,
"step": 1,
"do": [
{ "if": { "cond": { "eq": ["i", 3] }, "then": { "continue": true } } },
{ "if": { "cond": { "gt": ["i", 7] }, "then": { "break": true } } },
{ "print": { "call": { "square": ["i"] } } }
]
}
},
// Fun ending message
{ "print": "๐ Done with curly braces and JSON fun!" }
]
The Who is this for? is amazing.
I can kinda see it for a DSL or a transit medium for carrying permitted commands from a client to be heavily assessed prior to executing on a server.
There are other ways to accomplish the same, but it's certainly not the worst way to handle it.