Paul, Am 05.12.2013 um 19:10 schrieb Paul DeBruicker <pdebr...@gmail.com>:
> FWIW - The ElasitcSearch stuff only maps to Dictionaries because of an > oversight on my part. It should be fine if those objects materialized as > JsonObjects. What are you doing to get Dictionaries? Its been a while > since I looked at the code. > My question does not rely on exact wording. As JsonObject is derived from Dictionary you can exchange the words Dictionary/JsonObject in my question. I’m really on to finding a good way going from/to JsonObject/Dictionary. I can do it myself like you do. But if it comes to tasks I know I need more often I like to have something more generalized. Simple approaches have mostly just support for simple conversions but do not support structure changing conversion. Norbert > To map domain objects I usually do something custom because I usually don't > want all inst vars being sent as JSON. An example of what I normally do is: > > #jsonWriteOn: aStream > | y | > > y := JsonObject new. > self varNamesToSerializeAsJson. > do: [ :each | > (self perform: each asSymbol) isNil > ifFalse: [ y at: each put: (self perform: each > asSymbol) ] ]. > y jsonWriteOn: aStream > > > and then when materializing: > > > fromJson: aJsonResult > self varsToMaterializeFromJson > do: [ :eachSymbol | > | jsonObj class obj | > jsonObj := aJsonResult at: eachSymbol asString > ifAbsent: [ nil ]. > jsonObj notNil > ifTrue: [ > class := MyDomain > classForJsonVariableNamed: eachSymbol. > obj := class isNil > ifTrue: [ jsonObj trimBoth ] > ifFalse: [ class fromJson: > jsonObj ]. > self perform: (eachSymbol , ':') > asSymbol with: obj ] ] > > > > #classForJsonVariableNamed: just looks up in a dictionary that contains inst > var names as keys and classes as values. > > That all being said I'd be interested to learn a better way to do it. > > Hope this helps > > Paul > > > > Norbert Hartl wrote >> What would be the best software to map my objects to dictionaries? There >> are a lot of packages in pharo that deal with JSON somehow. But it seems >> none does mapping from objects to dictionaries and is standalone. We’ve >> got >> >> - NeoJSON package . Maps objects to strings directly for performance >> reason >> - JSON package. Maps string to JsonObject (subclassed from dictionary) >> - Voyage magritte based mapper: Closest to what I find useful but buried >> inside of Voyage. And I’m not sure it would be easy to factor out this >> module as a standalone mapper. >> - Seaside javascript… : I forgot what it really does. I often shy away >> looking at it because I don’t want to suck in all the dependencies. >> >> I’m asking because for me this is an important asset. If we talk about >> JSON there are three things: Objects, JSON structure (being dictionaries >> and other collections in pharo) and JSON strings. Writing to another >> server or to a file producing JSON strings seems to be enough. But using >> it for another system like MongoDB or ElasticSearch this does not work. >> Here the common interface seems to be dictionaries. With ElasticSearch >> mapping dictionaries to JSON and MongoDB mapping dictionaries to BSON. So >> a good descriptive way to map objects to dictionaries would be a good >> thing to have. >> >> Any thoughts? >> >> Norbert > > > > > > -- > View this message in context: > http://forum.world.st/Json-case-Mapping-objects-to-dictionaries-tp4727773p4727802.html > Sent from the Pharo Smalltalk Developers mailing list archive at Nabble.com. >