Hi sven I'm trying to adapt the teapot library example to get a simple item collector (as a project for a future book) and so that I can learn and use it for my PS2/PS3 game collection :) Now when I set up teapot to emit JSON I get an NeoJSONMappingNotFound In the library example attila does not manipulate objects but dictionaries. So I imagine that I have to do something :) I read the NeoJSON chapter but I did not find the solution. Should I implement neoJsonOn: on my domain? Stef -- Using Opera's mail client: http://www.opera.com/mail/
I looked at the Neo code and I do not see how I can specify a mapping at the class level because I cannot control the json writer creation. So I should probably shortcut everything at the neoJsonOn: level. Stef
Hi sven
I'm trying to adapt the teapot library example to get a simple item collector (as a project for a future book) and so that I can learn and use it for my PS2/PS3 game collection :)
Now when I set up teapot to emit JSON I get an NeoJSONMappingNotFound In the library example attila does not manipulate objects but dictionaries. So I imagine that I have to do something :) I read the NeoJSON chapter but I did not find the solution.
Should I implement neoJsonOn: on my domain?
Stef
-- Using Opera's mail client: http://www.opera.com/mail/
On 16 Dec 2016, at 15:10, stepharong <stepharong@free.fr> wrote:
I looked at the Neo code and I do not see how I can specify a mapping at the class level because I cannot control the json writer creation.
See my previous message (sent at the same time ;-) << add it to the class side of your model objects as #neoJsonMapping: (search for implementors as examples). >>
So I should probably shortcut everything at the neoJsonOn: level.
Stef
Hi sven
I'm trying to adapt the teapot library example to get a simple item collector (as a project for a future book) and so that I can learn and use it for my PS2/PS3 game collection :)
Now when I set up teapot to emit JSON I get an NeoJSONMappingNotFound In the library example attila does not manipulate objects but dictionaries. So I imagine that I have to do something :) I read the NeoJSON chapter but I did not find the solution.
Should I implement neoJsonOn: on my domain?
Stef
-- Using Opera's mail client: http://www.opera.com/mail/
Stef,
On 16 Dec 2016, at 15:00, stepharong <stepharong@free.fr> wrote:
Hi sven
I'm trying to adapt the teapot library example to get a simple item collector (as a project for a future book) and so that I can learn and use it for my PS2/PS3 game collection :)
Now when I set up teapot to emit JSON I get an NeoJSONMappingNotFound In the library example attila does not manipulate objects but dictionaries. So I imagine that I have to do something :) I read the NeoJSON chapter but I did not find the solution.
Should I implement neoJsonOn: on my domain?
Section 5 of https://ci.inria.fr/pharo-contribution/job/EnterprisePharoBook/lastSuccessfu... explains most of this. You either add the mapping to the writer, builder style, or you add it to the class side of your model objects as #neoJsonMapping: (search for implementors as examples). I see that this second aspect is not well explained in the book. In the simplest case, the following is enough: neoJsonMapping: mapper mapper for: self do: [ :mapping | mapping mapInstVars: #(id width height data) ] But is gets a bit more complicated with inheritance. In a last resort you could also overwrite #neoJsonOn: Now, this is all for the writer side. Reading is harder because JSON has no type info (that what STON adds, among others), so you have to tell the reader what (static) type you want the parser to create. This is based on the same mapping. This is what #nextAs: does. If you have a more complex graph with collection values, you need to type all of them 'statically'. There are some examples in the unit tests. Sven
Stef
-- Using Opera's mail client: http://www.opera.com/mail/
Ok I see. I was doing GameCollection >> neoJsonOn: neoJSONWriter neoJSONWriter writeObject: games GameItem >> neoJsonOn: neoJSONWriter self class instanceVariables do: [ :each | neoJSONWriter writeObject: (self instVarNamed: each) ] Now it did not work because byteString is not covered and I found that strange. I will use your solution. I read the section 5 before so there is something missing there. I will see how I can add an example. May be we should improve the class comment of mapper stating this class methods. Stef
On 16 Dec 2016, at 15:23, stepharong <stepharong@free.fr> wrote:
Ok I see.
I was doing
GameCollection >> neoJsonOn: neoJSONWriter
neoJSONWriter writeObject: games
GameItem >> neoJsonOn: neoJSONWriter self class instanceVariables do: [ :each | neoJSONWriter writeObject: (self instVarNamed: each) ]
Now it did not work because byteString is not covered and I found that strange.
I will use your solution.
I read the section 5 before so there is something missing there. I will see how I can add an example.
May be we should improve the class comment of mapper stating this class methods.
It is right there, in NeoJSONMapper's class comment ... A mapping can be specified explicitely on a mapper, or can be resolved using the #neoJsonMapping: class method. ... This is the superclass of both NeoJSONReader and NeoJSONWriter. But we should add it to the book chapter too.
Stef
Ok it works :) And I read the class comment but I do not see it. Now do you have an idea why I got this other missing class mapping for bytestring? Stef On Fri, 16 Dec 2016 15:25:40 +0100, Sven Van Caekenberghe <sven@stfx.eu> wrote:
On 16 Dec 2016, at 15:23, stepharong <stepharong@free.fr> wrote:
Ok I see.
I was doing
GameCollection >> neoJsonOn: neoJSONWriter
neoJSONWriter writeObject: games
GameItem >> neoJsonOn: neoJSONWriter self class instanceVariables do: [ :each | neoJSONWriter writeObject: (self instVarNamed: each) ]
Now it did not work because byteString is not covered and I found that strange.
I will use your solution.
I read the section 5 before so there is something missing there. I will see how I can add an example.
May be we should improve the class comment of mapper stating this class methods.
It is right there, in NeoJSONMapper's class comment
... A mapping can be specified explicitely on a mapper, or can be resolved using the #neoJsonMapping: class method. ...
This is the superclass of both NeoJSONReader and NeoJSONWriter.
But we should add it to the book chapter too.
Stef
-- Using Opera's mail client: http://www.opera.com/mail/
On 16 Dec 2016, at 15:47, stepharong <stepharong@free.fr> wrote:
Ok it works :)
Good.
And I read the class comment but I do not see it.
Strange. In Neo-JSON-Core-SvenVanCaekenberghe.37 in the class comment of NeoJSONMapper last paragraph before the examples.
Now do you have an idea why I got this other missing class mapping for bytestring?
You must have done something wrong ;-) NeoJSONWriter toString: { 'string'. #symbol. 1. Float pi }. '["string","symbol",1,3.141592653589793]'
Stef
On Fri, 16 Dec 2016 15:25:40 +0100, Sven Van Caekenberghe <sven@stfx.eu> wrote:
On 16 Dec 2016, at 15:23, stepharong <stepharong@free.fr> wrote:
Ok I see.
I was doing
GameCollection >> neoJsonOn: neoJSONWriter
neoJSONWriter writeObject: games
GameItem >> neoJsonOn: neoJSONWriter self class instanceVariables do: [ :each | neoJSONWriter writeObject: (self instVarNamed: each) ]
Now it did not work because byteString is not covered and I found that strange.
I will use your solution.
I read the section 5 before so there is something missing there. I will see how I can add an example.
May be we should improve the class comment of mapper stating this class methods.
It is right there, in NeoJSONMapper's class comment
... A mapping can be specified explicitely on a mapper, or can be resolved using the #neoJsonMapping: class method. ...
This is the superclass of both NeoJSONReader and NeoJSONWriter.
But we should add it to the book chapter too.
Stef
-- Using Opera's mail client: http://www.opera.com/mail/
Strange.
In Neo-JSON-Core-SvenVanCaekenberghe.37 in the class comment of NeoJSONMapper last paragraph before the examples.
sure I just meant that it was not visible enough. We should add for example XXX >> neoJsonMapping: aMapper aMapper for: self do: [ :mapping | mapping mapInstVars: #(#title #kind #hasDoc #grade #stars #isCollectorEdition #paidPrice #language #zone)]
Now do you have an idea why I got this other missing class mapping for bytestring?
You must have done something wrong ;-)
NeoJSONWriter toString: { 'string'. #symbol. 1. Float pi }.
'["string","symbol",1,3.141592653589793]'
I do not think so because my objects totally stupid. So this is why I was surprised. here are two exampleKlonoa <sampleInstance> ^ self new title: 'Klonoa'; ps2; threeStar; grade: '(16/15)'; paidPrice: 1 exampleWildArm <sampleInstance> ^ self new title: 'Wild Arm'; ps2; threeStar; grade: '(16/15)'; paidPrice: 1 only strings, numbers and symbols. this ByteString looked strange.
Stef
On Fri, 16 Dec 2016 15:25:40 +0100, Sven Van Caekenberghe <sven@stfx.eu> wrote:
On 16 Dec 2016, at 15:23, stepharong <stepharong@free.fr> wrote:
Ok I see.
I was doing
GameCollection >> neoJsonOn: neoJSONWriter
neoJSONWriter writeObject: games
GameItem >> neoJsonOn: neoJSONWriter self class instanceVariables do: [ :each | neoJSONWriter writeObject: (self instVarNamed: each) ]
Now it did not work because byteString is not covered and I found that strange.
I will use your solution.
I read the section 5 before so there is something missing there. I will see how I can add an example.
May be we should improve the class comment of mapper stating this class methods.
It is right there, in NeoJSONMapper's class comment
... A mapping can be specified explicitely on a mapper, or can be resolved using the #neoJsonMapping: class method. ...
This is the superclass of both NeoJSONReader and NeoJSONWriter.
But we should add it to the book chapter too.
Stef
-- Using Opera's mail client: http://www.opera.com/mail/
-- Using Opera's mail client: http://www.opera.com/mail/
Stef, Do you still have trouble with this ? It is really hard for me to help you without a reproducible case. Sven
On 16 Dec 2016, at 21:02, stepharong <stepharong@free.fr> wrote:
Strange.
In Neo-JSON-Core-SvenVanCaekenberghe.37 in the class comment of NeoJSONMapper last paragraph before the examples.
sure I just meant that it was not visible enough. We should add for example
XXX >> neoJsonMapping: aMapper
aMapper for: self do: [ :mapping | mapping mapInstVars: #(#title #kind #hasDoc #grade #stars #isCollectorEdition #paidPrice #language #zone)]
Now do you have an idea why I got this other missing class mapping for bytestring?
You must have done something wrong ;-)
NeoJSONWriter toString: { 'string'. #symbol. 1. Float pi }.
'["string","symbol",1,3.141592653589793]'
I do not think so because my objects totally stupid. So this is why I was surprised.
here are two
exampleKlonoa <sampleInstance> ^ self new title: 'Klonoa'; ps2; threeStar; grade: '(16/15)'; paidPrice: 1
exampleWildArm <sampleInstance> ^ self new title: 'Wild Arm'; ps2; threeStar; grade: '(16/15)'; paidPrice: 1
only strings, numbers and symbols. this ByteString looked strange.
Stef
On Fri, 16 Dec 2016 15:25:40 +0100, Sven Van Caekenberghe <sven@stfx.eu> wrote:
On 16 Dec 2016, at 15:23, stepharong <stepharong@free.fr> wrote:
Ok I see.
I was doing
GameCollection >> neoJsonOn: neoJSONWriter
neoJSONWriter writeObject: games
GameItem >> neoJsonOn: neoJSONWriter self class instanceVariables do: [ :each | neoJSONWriter writeObject: (self instVarNamed: each) ]
Now it did not work because byteString is not covered and I found that strange.
I will use your solution.
I read the section 5 before so there is something missing there. I will see how I can add an example.
May be we should improve the class comment of mapper stating this class methods.
It is right there, in NeoJSONMapper's class comment
... A mapping can be specified explicitely on a mapper, or can be resolved using the #neoJsonMapping: class method. ...
This is the superclass of both NeoJSONReader and NeoJSONWriter.
But we should add it to the book chapter too.
Stef
-- Using Opera's mail client: http://www.opera.com/mail/
-- Using Opera's mail client: http://www.opera.com/mail/
participants (2)
-
stepharong -
Sven Van Caekenberghe