From 919593395c7325ffd1cb93fb787c2772da2195f0 Mon Sep 17 00:00:00 2001 From: flywind <43030857+xflywind@users.noreply.github.com> Date: Mon, 2 Nov 2020 17:22:26 +0800 Subject: [PATCH] fix #15815 (#15817) --- lib/pure/json.nim | 5 ++++- tests/stdlib/toptions.nim | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 tests/stdlib/toptions.nim diff --git a/lib/pure/json.nim b/lib/pure/json.nim index 9766e32cb..f3145301f 100644 --- a/lib/pure/json.nim +++ b/lib/pure/json.nim @@ -1120,7 +1120,10 @@ when defined(nimFixedForwardGeneric): proc initFromJson[T](dst: var Option[T]; jsonNode: JsonNode; jsonPath: var string) = if jsonNode != nil and jsonNode.kind != JNull: - dst = some(default(T)) + when T is ref: + dst = some(new(T)) + else: + dst = some(default(T)) initFromJson(dst.get, jsonNode, jsonPath) macro assignDistinctImpl[T: distinct](dst: var T;jsonNode: JsonNode; jsonPath: var string) = diff --git a/tests/stdlib/toptions.nim b/tests/stdlib/toptions.nim new file mode 100644 index 000000000..b982d747d --- /dev/null +++ b/tests/stdlib/toptions.nim @@ -0,0 +1,16 @@ +discard """ + output: '''{"foo":{"test":"123"}}''' +""" + +import json, options + +type + Foo = ref object + test: string + Test = object + foo: Option[Foo] + +let js = """{"foo": {"test": "123"}}""" +let parsed = parseJson(js) +let a = parsed.to(Test) +echo $(%*a) \ No newline at end of file