Hi Sven, thank you for the fix!
I understand that #allowNil is about reading, while #writeNil: is about writing. I use the same mapping for the reader and writer. This is why I spotted the case. Thanks! Juraj > On Nov 13, 2017, at 16:30, Sven Van Caekenberghe <[email protected]> wrote: > > Juraj, > > Check out: > > === > Name: Neo-JSON-Core-SvenVanCaekenberghe.46 > Author: SvenVanCaekenberghe > Time: 13 November 2017, 6:59:13.995868 pm > UUID: f412799a-431a-0d00-850e-5c3c05ce5378 > Ancestors: Neo-JSON-Core-SvenVanCaekenberghe.45 > > Fix the NeoJSONWriter>>#writeNil: true option by adding a short circuit to > NeoJSONWriter>>nextPut:as: (as reported by Juraj Kubelka) > > Add #testRectanglePointsWithNil > === > Name: Neo-JSON-Tests-SvenVanCaekenberghe.44 > Author: SvenVanCaekenberghe > Time: 13 November 2017, 6:59:37.365898 pm > UUID: 35acdd9b-431a-0d00-850f-878405ce5378 > Ancestors: Neo-JSON-Tests-SvenVanCaekenberghe.43 > > Fix the NeoJSONWriter>>#writeNil: true option by adding a short circuit to > NeoJSONWriter>>nextPut:as: (as reported by Juraj Kubelka) > > Add #testRectanglePointsWithNil > === > > These should fix your last case. I used your example in the new unit test. > > Note that #allowNil on a mapper is about reading, not writing. > > HTH, > > Sven > >> On 13 Nov 2017, at 17:10, Juraj Kubelka <[email protected]> wrote: >> >> Hi, >> >> I have just found the answer for the reader: >> >> -=-=-=- >> rectangleJson := '{ >> "origin" : null, >> "corner" : null >> }'. >> >> (NeoJSONReader on: rectangleJson readStream) >> mapInstVarsFor: Point; >> for: Point do: [ :mapping | >> mapping allowNil ]; >> for: Rectangle do: [ :mapping | >> (mapping mapInstVar: #origin) valueSchema: Point. >> (mapping mapInstVar: #corner) valueSchema: Point ]; >> nextAs: Rectangle. >> -=-=-=- >> >> I have an impression that there is a bug in the writer. While the following >> example works: >> >> -=-=-=- >> String streamContents: [ :stream | >> (NeoJSONWriter on: stream) >> for: Point do: [ :mapping | >> mapping mapAllInstVars. >> mapping allowNil ]; >> for: Rectangle do: [ :mapping | >> (mapping mapInstVar: #origin) valueSchema: Point. >> (mapping mapInstVar: #corner) valueSchema: Point ]; >> nextPut: Rectangle new ]. >> -=-=-=- >> >> the following example does not work: >> >> -=-=-=- >> String streamContents: [ :stream | >> (NeoJSONWriter on: stream) >> for: Point do: [ :mapping | >> mapping mapAllInstVars. >> mapping allowNil ]; >> for: Rectangle do: [ :mapping | >> (mapping mapInstVar: #origin) valueSchema: Point. >> (mapping mapInstVar: #corner) valueSchema: Point ]; >> writeNil: true; >> nextPut: Rectangle new ]. >> -=-=-=- >> >> What do you think? >> Juraj >> >>> On Nov 13, 2017, at 12:50, Juraj Kubelka <[email protected]> wrote: >>> >>> Hi, >>> >>> Please, how should I modify the mapping to be able to parse the following >>> example? >>> >>> -=-=-=- >>> rectangleJson := '{ >>> "origin" : null, >>> "corner" : null >>> }'. >>> >>> (NeoJSONReader on: rectangleJson readStream) >>> mapInstVarsFor: Point; >>> for: Rectangle do: [ :mapping | >>> (mapping mapInstVar: #origin) valueSchema: Point. >>> (mapping mapInstVar: #corner) valueSchema: Point ]; >>> nextAs: Rectangle. >>> -=-=-=- >>> >>> I receive from a server JSON messages including null values. >>> Can we say use Point value schema or null? How? >>> >>> In the documentation I can see the example: >>> >>> -=-=-=- >>> String streamContents: [ :stream | >>> (NeoJSONWriter on: stream) >>> mapAllInstVarsFor: Point; >>> writeNil: true; >>> nextPut: Point new ]. >>> -=-=-=- >>> that produces {"x":null,"y":null} >>> >>> But I do not see how to apply this for the following example: >>> -=-=-=- >>> String streamContents: [ :stream | >>> (NeoJSONWriter on: stream) >>> mapAllInstVarsFor: Point; >>> for: Rectangle do: [ :mapping | >>> (mapping mapInstVar: #origin) valueSchema: Point. >>> (mapping mapInstVar: #corner) valueSchema: Point ]; >>> writeNil: true; >>> nextPut: Rectangle new ]. >>> -=-=-=- >>> >>> Thanks, >>> Juraj >>> >>> >> > >
