Corrected pretty() in json module, and added another file with json test data.

This commit is contained in:
dom96 2011-01-28 00:05:42 +00:00
commit 4b7ff3e090
3 changed files with 106 additions and 17 deletions

View file

@ -18,7 +18,7 @@ import
hashes, strutils, lexbase, streams, unicode hashes, strutils, lexbase, streams, unicode
type 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 jsonError, ## an error ocurred during parsing
jsonEof, ## end of file reached jsonEof, ## end of file reached
jsonString, ## a string literal jsonString, ## a string literal
@ -620,6 +620,7 @@ proc toPretty(result: var string, node: PJsonNode, indent = 2, ml = True,
of JObject: of JObject:
if currIndent != 0 and not lstArr: result.nl(ml) if currIndent != 0 and not lstArr: result.nl(ml)
result.indent(currIndent) # Indentation result.indent(currIndent) # Indentation
if node.fields.len > 0:
result.add("{") result.add("{")
result.nl(ml) # New line result.nl(ml) # New line
for i in 0..len(node.fields)-1: for i in 0..len(node.fields)-1:
@ -635,6 +636,8 @@ proc toPretty(result: var string, node: PJsonNode, indent = 2, ml = True,
result.nl(ml) result.nl(ml)
result.indent(currIndent) # indent the same as { result.indent(currIndent) # indent the same as {
result.add("}") result.add("}")
else:
result.add("{}")
of JString: of JString:
if lstArr: result.indent(currIndent) if lstArr: result.indent(currIndent)
result.add(escapeJson(node.str)) 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) if lstArr: result.indent(currIndent)
result.add($node.bval) result.add($node.bval)
of JArray: of JArray:
if lstArr: result.indent(currIndent)
if len(node.elems) != 0: if len(node.elems) != 0:
result.add("[") result.add("[")
result.nl(ml) result.nl(ml)
@ -771,9 +775,14 @@ when isMainModule:
#var node = parse("{ \"test\": null }") #var node = parse("{ \"test\": null }")
#echo(node.existsKey("test56")) #echo(node.existsKey("test56"))
var parsed = parseFile("tests/testdata/jsontest.json") var parsed = parseFile("tests/testdata/jsontest.json")
var parsed2 = parseFile("tests/testdata/jsontest2.json")
echo(parsed) echo(parsed)
echo() echo()
echo(pretty(parsed, 2)) echo(pretty(parsed, 2))
echo()
echo(parsed["keyÄÖöoßß"])
echo()
echo(pretty(parsed2))
discard """ discard """
while true: while true:

View file

@ -19,7 +19,7 @@
] , ] ,
"keyÄÖöoßß": false "keyÄÖöoß\u00DF": false
} }
// [{}, {899: 12, "x": "y"}, [], 123, 89, 89, "xyz", null, [], [], [1, 2, 3]] // [{}, {899: 12, "x": "y"}, [], 123, 89, 89, "xyz", null, [], [], [1, 2, 3]]

80
tests/testdata/jsontest2.json vendored Normal file
View file

@ -0,0 +1,80 @@
{
"after": "b85008345e2faa23024b222e2e6b17f7ef8b6270",
"before": "f469a6fba9a81ac06d813761e346673fbc8a6ef6",
"commits": [
{
"added": [],
"author": {
"email": "dominikpicheta@googlemail.com",
"name": "dom96",
"username": "dom96"
},
"id": "9e887b88a633c432d8e6859d7fab5429128aea7e",
"message": "Added getPort and fixed a problem with the Disconnect event.",
"modified": [
"Network\/SimpleIRC\/Core.hs"
],
"removed": [],
"timestamp": "2010-10-24T03:16:30-07:00",
"url": "https:\/\/github.com\/dom96\/SimpleIRC\/commit\/9e887b88a633c432d8e6859d7fab5429128aea7e"
},
{
"added": [
"tests\/channelNickTracking.hs"
],
"author": {
"email": "dominikpicheta@googlemail.com",
"name": "dom96",
"username": "dom96"
},
"id": "001c4a1834a95fa3cb4c6fefc3df9508c6e6b58a",
"message": "Channel and nick tracking fully work now.",
"modified": [
"Network\/SimpleIRC\/Core.hs",
"Network\/SimpleIRC\/Messages.hs"
],
"removed": [],
"timestamp": "2010-10-24T04:01:28-07:00",
"url": "https:\/\/github.com\/dom96\/SimpleIRC\/commit\/001c4a1834a95fa3cb4c6fefc3df9508c6e6b58a"
},
{
"added": [],
"author": {
"email": "dominikpicheta@googlemail.com",
"name": "dom96",
"username": "dom96"
},
"id": "b85008345e2faa23024b222e2e6b17f7ef8b6270",
"message": "Forgot to export getPort.",
"modified": [
"Network\/SimpleIRC\/Core.hs"
],
"removed": [],
"timestamp": "2010-10-24T04:18:38-07:00",
"url": "https:\/\/github.com\/dom96\/SimpleIRC\/commit\/b85008345e2faa23024b222e2e6b17f7ef8b6270"
}
],
"compare": "https:\/\/github.com\/dom96\/SimpleIRC\/compare\/f469a6f...b850083",
"forced": false,
"ref": "refs\/heads\/master",
"repository": {
"created_at": "2010\/08\/13 10:24:57 -0700",
"description": "IRC Library for Haskell",
"fork": false,
"forks": 1,
"has_downloads": true,
"has_issues": true,
"has_wiki": true,
"homepage": "http:\/\/hackage.haskell.org\/package\/simpleirc",
"name": "SimpleIRC",
"open_issues": 1,
"owner": {
"email": "dominikpicheta@googlemail.com",
"name": "dom96"
},
"private": false,
"pushed_at": "2010\/10\/24 04:18:48 -0700",
"url": "https:\/\/github.com\/dom96\/SimpleIRC",
"watchers": 7
}
}