Skip to content

Commit 35d9fa6

Browse files
committed
Add support for +123 numbers.
1 parent f44b3a7 commit 35d9fa6

File tree

3 files changed

+20
-1
lines changed

3 files changed

+20
-1
lines changed

src/jsony.nim

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ proc parseHook*(s: string, i: var int, v: var SomeSignedInt) =
101101
v = type(v)(parseInt(parseSymbol(s, i)))
102102
else:
103103
eatSpace(s, i)
104+
if i < s.len and s[i] == '+':
105+
inc i
104106
if i < s.len and s[i] == '-':
105107
var v2: uint64
106108
inc i
@@ -420,7 +422,7 @@ proc parseHook*(s: string, i: var int, v: var JsonNode) =
420422
v = newJBool(true)
421423
elif data == "false":
422424
v = newJBool(false)
423-
elif data.len > 0 and data[0] in {'0'..'9'}:
425+
elif data.len > 0 and data[0] in {'0'..'9', '-', '+'}:
424426
if "." in data:
425427
try:
426428
v = newJFloat(parseFloat(data))

tests/test_json_in_json.nim

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,6 @@ block:
2121

2222
let s = """{"name":"json-in-json","data":{"random-data":"here","number":123,"number2":123.456,"array":[1,2,3],"active":true,"null":null}}"""
2323
doAssert $s.fromJson() == """{"name":"json-in-json","data":{"random-data":"here","number":123,"number2":123.456,"array":[1,2,3],"active":true,"null":null}}"""
24+
25+
let ns = """[123, +123, -123, 123.456, +123.456, -123.456, 123.456E9, +123.456E9, -123.456E9]"""
26+
doAssert $ns.fromJson() == """[123,123,-123,123.456,123.456,-123.456,123456000000.0,123456000000.0,-123456000000.0]"""

tests/test_numbers.nim

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,22 @@ block:
2424
doAssert " -99 ".fromJson(int32) == -99
2525
doAssert " -99 ".fromJson(int64) == -99
2626

27+
doAssert " +99 ".fromJson(int8) == 99
28+
doAssert " +99 ".fromJson(int16) == 99
29+
doAssert " +99 ".fromJson(int32) == 99
30+
doAssert " +99 ".fromJson(int64) == 99
31+
32+
doAssert " 1.25 ".fromJson(float32) == 1.25
33+
doAssert " 1.25 ".fromJson(float32) == 1.25
34+
doAssert " +1.25 ".fromJson(float64) == 1.25
35+
doAssert " +1.25 ".fromJson(float64) == 1.25
36+
doAssert " -1.25 ".fromJson(float64) == -1.25
37+
doAssert " -1.25 ".fromJson(float64) == -1.25
38+
2739
doAssert " 1.34E3 ".fromJson(float32) == 1.34E3
2840
doAssert " 1.34E3 ".fromJson(float32) == 1.34E3
41+
doAssert " +1.34E3 ".fromJson(float64) == 1.34E3
42+
doAssert " +1.34E3 ".fromJson(float64) == 1.34E3
2943
doAssert " -1.34E3 ".fromJson(float64) == -1.34E3
3044
doAssert " -1.34E3 ".fromJson(float64) == -1.34E3
3145

0 commit comments

Comments
 (0)