From c7cba5e6f03ef790c78485e8ff23a1b0794cd884 Mon Sep 17 00:00:00 2001 From: Abhishek Kapatkar Date: Fri, 30 Mar 2018 13:33:42 -0700 Subject: [PATCH] Fixes #6902 --- lib/pure/json.nim | 2 +- tests/stdlib/tjsonmacro.nim | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/pure/json.nim b/lib/pure/json.nim index 912cd68379..da1b66188b 100644 --- a/lib/pure/json.nim +++ b/lib/pure/json.nim @@ -1697,7 +1697,7 @@ proc createConstructor(typeSym, jsonNode: NimNode): NimNode = result = quote do: ( - if `lenientJsonNode`.isNil: `workaround`[`optionGeneric`]() else: some[`optionGeneric`](`value`) + if `lenientJsonNode`.isNil or `jsonNode`.kind == JNull: `workaround`[`optionGeneric`]() else: some[`optionGeneric`](`value`) ) of "table", "orderedtable": let tableKeyType = typeSym[1] diff --git a/tests/stdlib/tjsonmacro.nim b/tests/stdlib/tjsonmacro.nim index e8740c591e..f13d2e5cb4 100644 --- a/tests/stdlib/tjsonmacro.nim +++ b/tests/stdlib/tjsonmacro.nim @@ -330,6 +330,21 @@ when isMainModule: doAssert jDeser[0].n2.get() == "ABC" doAssert jDeser[1].n2.isNone() + # Issue #6902 + type + Obj = object + n1: int + n2: Option[int] + n3: Option[string] + n4: Option[bool] + + var j0 = parseJson("""{"n1": 1, "n2": null, "n3": null, "n4": null}""") + let j0Deser = j0.to(Obj) + doAssert j0Deser.n1 == 1 + doAssert j0Deser.n2.isNone() + doAssert j0Deser.n3.isNone() + doAssert j0Deser.n4.isNone() + # Table[T, Y] support. block: type