mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
Corrected pretty() in json module, and added another file with json test data.
This commit is contained in:
@@ -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:
|
||||
|
||||
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]]
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user