diff options
Diffstat (limited to 'src/ext_depends/D-YAML/examples/tojson/source')
| -rw-r--r-- | src/ext_depends/D-YAML/examples/tojson/source/app.d | 54 | 
1 files changed, 54 insertions, 0 deletions
diff --git a/src/ext_depends/D-YAML/examples/tojson/source/app.d b/src/ext_depends/D-YAML/examples/tojson/source/app.d new file mode 100644 index 0000000..654274f --- /dev/null +++ b/src/ext_depends/D-YAML/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; +    final switch (node.type) +    { +        case NodeType.sequence: +            output = JSONValue(string[].init); +            foreach (Node seqNode; node) +            { +                output.array ~= seqNode.toJSON(); +            } +            break; +        case NodeType.mapping: +            output = JSONValue(string[string].init); +            foreach (Node keyNode, Node valueNode; node) +            { +                output[keyNode.as!string] = valueNode.toJSON(); +            } +            break; +        case NodeType.string: +            output = node.as!string; +            break; +        case NodeType.integer: +            output = node.as!long; +            break; +        case NodeType.decimal: +            output = node.as!real; +            break; +        case NodeType.boolean: +            output = node.as!bool; +            break; +        case NodeType.timestamp: +            output = node.as!SysTime.toISOExtString(); +            break; +        case NodeType.merge: +        case NodeType.null_: +        case NodeType.binary: +        case NodeType.invalid: +    } +    return output; +}  | 
