Corrected pretty() in json module, and added another file with json test data.
This commit is contained in:
parent
fa111b9067
commit
4b7ff3e090
3 changed files with 106 additions and 17 deletions
|
|
@ -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:
|
||||||
|
|
|
||||||
2
tests/testdata/jsontest.json
vendored
2
tests/testdata/jsontest.json
vendored
|
|
@ -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
80
tests/testdata/jsontest2.json
vendored
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue