From bb7b87370a5d9891da54296b63c6c3b995d4a937 Mon Sep 17 00:00:00 2001 From: Cameron Ross Date: Thu, 21 Jun 2018 00:34:07 -0300 Subject: [PATCH] add tojson subpackage for converting yaml docs to json (#171) add tojson subpackage for converting yaml docs to json merged-on-behalf-of: BBasile --- .travis.yml | 1 + dub.json | 1 + examples/tojson/dub.json | 8 ++++++ examples/tojson/source/app.d | 54 ++++++++++++++++++++++++++++++++++++ 4 files changed, 64 insertions(+) create mode 100644 examples/tojson/dub.json create mode 100644 examples/tojson/source/app.d diff --git a/.travis.yml b/.travis.yml index 5b899a5..67b9cde 100644 --- a/.travis.yml +++ b/.travis.yml @@ -36,6 +36,7 @@ script: - "dub build dyaml:getting-started" - "dub build dyaml:representer" - "dub build dyaml:resolver" + - "dub build dyaml:tojson" - "dub build dyaml:yaml_gen" - "dub build dyaml:yaml_stats" - dub test --build=unittest-cov diff --git a/dub.json b/dub.json index 67484f1..3f8a36c 100644 --- a/dub.json +++ b/dub.json @@ -13,6 +13,7 @@ "examples/getting_started", "examples/representer", "examples/resolver", + "examples/tojson", "examples/yaml_bench", "examples/yaml_gen", "examples/yaml_stats" diff --git a/examples/tojson/dub.json b/examples/tojson/dub.json new file mode 100644 index 0000000..ba014b8 --- /dev/null +++ b/examples/tojson/dub.json @@ -0,0 +1,8 @@ +{ + "name": "tojson", + "targetType": "executable", + "dependencies": + { + "dyaml": "*" + } +} diff --git a/examples/tojson/source/app.d b/examples/tojson/source/app.d new file mode 100644 index 0000000..e8bbcd4 --- /dev/null +++ b/examples/tojson/source/app.d @@ -0,0 +1,54 @@ +module dyaml.tojson; +import std.datetime; +import std.json; +import std.stdio; +import dyaml; + +void main() +{ + auto doc = Loader.fromFile(stdin).load(); + auto json = doc.toJSON; + writeln(json.toPrettyString); +} + +JSONValue toJSON(Node node) +{ + JSONValue output; + if (node.isSequence) + { + output = JSONValue(string[].init); + foreach (Node seqNode; node) + { + output.array ~= seqNode.toJSON(); + } + } + else if (node.isMapping) + { + output = JSONValue(string[string].init); + foreach (Node keyNode, Node valueNode; node) + { + output[keyNode.as!string] = valueNode.toJSON(); + } + } + else if (node.isString) + { + output = node.as!string; + } + else if (node.isInt) + { + output = node.as!long; + } + else if (node.isFloat) + { + output = node.as!real; + } + else if (node.isBool) + { + output = node.as!bool; + } + else if (node.isTime) + { + output = node.as!SysTime.toISOExtString(); + } + return output; +}