From 06ad80cc4555ec1cb80d46baac2d93525137314c Mon Sep 17 00:00:00 2001 From: def Date: Mon, 5 Jan 2015 01:30:03 +0100 Subject: [PATCH 1/4] indent = 0 looks better for `$`(node: JsonNode) --- lib/pure/json.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pure/json.nim b/lib/pure/json.nim index 385787d6c4..c5510a50e2 100644 --- a/lib/pure/json.nim +++ b/lib/pure/json.nim @@ -864,7 +864,7 @@ proc pretty*(node: JsonNode, indent = 2): string = proc `$`*(node: JsonNode): string = ## Converts `node` to its JSON Representation on one line. result = "" - toPretty(result, node, 1, false) + toPretty(result, node, 0, false) iterator items*(node: JsonNode): JsonNode = ## Iterator for the items of `node`. `node` has to be a JArray. From f223e94ccd98448e245e5a7bd7e7da396b9ae9c8 Mon Sep 17 00:00:00 2001 From: def Date: Mon, 5 Jan 2015 01:30:30 +0100 Subject: [PATCH 2/4] Add operator `%*` to JSON --- lib/pure/json.nim | 77 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 76 insertions(+), 1 deletion(-) diff --git a/lib/pure/json.nim b/lib/pure/json.nim index c5510a50e2..eed01e3761 100644 --- a/lib/pure/json.nim +++ b/lib/pure/json.nim @@ -30,9 +30,28 @@ ## ## 1.3000000000000000e+00 ## true +## +## This module can also be used to comfortably create JSON using the `%*` +## operator: +## +## .. code-block:: nim +## +## var hisName = "John" +## let herAge = 31 +## var j = %* +## [ +## { +## "name": hisName, +## "age": 30 +## }, +## { +## "name": "Susan", +## "age": herAge +## } +## ] import - hashes, strutils, lexbase, streams, unicode + hashes, strutils, lexbase, streams, unicode, macros type JsonEventKind* = enum ## enumeration of all events that may occur when parsing @@ -625,6 +644,31 @@ proc `%`*(elements: openArray[JsonNode]): JsonNode = newSeq(result.elems, elements.len) for i, p in pairs(elements): result.elems[i] = p +proc toJson(x: expr): expr {.compiletime.} = + case x.kind + of nnkBracket: + result = newNimNode(nnkBracket) + for i in 0 .. Date: Mon, 5 Jan 2015 13:19:10 +0100 Subject: [PATCH 3/4] Remove debugging echos again --- lib/pure/json.nim | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/pure/json.nim b/lib/pure/json.nim index eed01e3761..1b4b135b63 100644 --- a/lib/pure/json.nim +++ b/lib/pure/json.nim @@ -665,9 +665,7 @@ proc toJson(x: expr): expr {.compiletime.} = macro `%*`*(x: expr): expr = ## Convert an expression to a JsonParser directly, without having to specify ## `%` for every element. - echo x.treeRepr result = toJson(x) - echo result.treeRepr proc `==`* (a,b: JsonNode): bool = ## Check two nodes for equality From f3922bc4e5f2d01e8b594fbe30f24b2619bec993 Mon Sep 17 00:00:00 2001 From: def Date: Wed, 4 Feb 2015 19:27:56 +0100 Subject: [PATCH 4/4] Fix documentation and toJson signature --- lib/pure/json.nim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pure/json.nim b/lib/pure/json.nim index 1b4b135b63..0dc7991d10 100644 --- a/lib/pure/json.nim +++ b/lib/pure/json.nim @@ -644,7 +644,7 @@ proc `%`*(elements: openArray[JsonNode]): JsonNode = newSeq(result.elems, elements.len) for i, p in pairs(elements): result.elems[i] = p -proc toJson(x: expr): expr {.compiletime.} = +proc toJson(x: PNimrodNode): PNimrodNode {.compiletime.} = case x.kind of nnkBracket: result = newNimNode(nnkBracket) @@ -663,7 +663,7 @@ proc toJson(x: expr): expr {.compiletime.} = result = prefix(result, "%") macro `%*`*(x: expr): expr = - ## Convert an expression to a JsonParser directly, without having to specify + ## Convert an expression to a JsonNode directly, without having to specify ## `%` for every element. result = toJson(x)