summary refs log tree commit diff stats
path: root/lib/pure/json.nim
diff options
context:
space:
mode:
authordom96 <dominikpicheta@googlemail.com>2011-01-28 00:05:42 +0000
committerdom96 <dominikpicheta@googlemail.com>2011-01-28 00:05:42 +0000
commit4b7ff3e0902c92b3483bd1000a8d4fb3f2bf8077 (patch)
tree1a278f9add5e9ab1e00b0cccff641ed19a7ef189 /lib/pure/json.nim
parentfa111b9067f92107865d4496affcfc0518b7c493 (diff)
downloadNim-4b7ff3e0902c92b3483bd1000a8d4fb3f2bf8077.tar.gz
Corrected pretty() in json module, and added another file with json test data.
Diffstat (limited to 'lib/pure/json.nim')
-rwxr-xr-xlib/pure/json.nim41
1 files changed, 25 insertions, 16 deletions
diff --git a/lib/pure/json.nim b/lib/pure/json.nim
index 134c4926f..1afa1965b 100755
--- a/lib/pure/json.nim
+++ b/lib/pure/json.nim
@@ -18,7 +18,7 @@ import
   hashes, strutils, lexbase, streams, unicode
 
 type 
-  TJsonEventKind* = enum ## enumation of all events that may occur when parsing
+  TJsonEventKind* = enum ## enumeration of all events that may occur when parsing
     jsonError,           ## an error ocurred during parsing
     jsonEof,             ## end of file reached
     jsonString,          ## a string literal
@@ -620,21 +620,24 @@ proc toPretty(result: var string, node: PJsonNode, indent = 2, ml = True,
   of JObject:
     if currIndent != 0 and not lstArr: result.nl(ml)
     result.indent(currIndent) # Indentation
-    result.add("{")
-    result.nl(ml) # New line
-    for i in 0..len(node.fields)-1:
-      if i > 0:
-        result.add(", ")
-        result.nl(ml) # New Line
-      # Need to indent more than {
-      result.indent(newIndent(currIndent, indent, ml)) 
-      result.add(escapeJson(node.fields[i].key))
-      result.add(": ")
-      toPretty(result, node.fields[i].val, indent, ml, False, 
-               newIndent(currIndent, indent, ml))
-    result.nl(ml)
-    result.indent(currIndent) # indent the same as {
-    result.add("}")
+    if node.fields.len > 0:  
+      result.add("{")
+      result.nl(ml) # New line
+      for i in 0..len(node.fields)-1:
+        if i > 0:
+          result.add(", ")
+          result.nl(ml) # New Line
+        # Need to indent more than {
+        result.indent(newIndent(currIndent, indent, ml)) 
+        result.add(escapeJson(node.fields[i].key))
+        result.add(": ")
+        toPretty(result, node.fields[i].val, indent, ml, False, 
+                 newIndent(currIndent, indent, ml))
+      result.nl(ml)
+      result.indent(currIndent) # indent the same as {
+      result.add("}")
+    else:
+      result.add("{}")
   of JString: 
     if lstArr: result.indent(currIndent)
     result.add(escapeJson(node.str))
@@ -645,6 +648,7 @@ proc toPretty(result: var string, node: PJsonNode, indent = 2, ml = True,
     if lstArr: result.indent(currIndent)
     result.add($node.bval)
   of JArray:
+    if lstArr: result.indent(currIndent)
     if len(node.elems) != 0:
       result.add("[")
       result.nl(ml)
@@ -771,9 +775,14 @@ when isMainModule:
   #var node = parse("{ \"test\": null }")
   #echo(node.existsKey("test56"))
   var parsed = parseFile("tests/testdata/jsontest.json")
+  var parsed2 = parseFile("tests/testdata/jsontest2.json")
   echo(parsed)
   echo()
   echo(pretty(parsed, 2))
+  echo()
+  echo(parsed["keyÄÖöoßß"])
+  echo()
+  echo(pretty(parsed2))
 
   discard """
   while true: