Hi,

Sebastian asked me for a solution to the following problem: reading a JSON map 
where the values should be instances of a specific domain object. This was 
already possible for lists.

Using the newly added NeoJSONCustomMapping>>#mapWithValueSchema: this is now 
possible, as the following unit test shows:

testDictionaryOfObject2
  | data json reader |
  data := Dictionary new.
  data 
    at: #one put: NeoJSONTestObject2 example1;
    at: #two put: NeoJSONTestObject2 example1.
  json := NeoJSONWriter toString: data.
  reader := NeoJSONReader on: json readStream.
  reader for: #DictionaryOfObject2 customDo: [ :mapping |
    mapping mapWithValueSchema: NeoJSONTestObject2 ].  
  self 
    assert: (reader nextAs: #DictionaryOfObject2)
    equals: data

Note that the mapping mechanism in NeoJSON is optional. Without mapping you get 
Arrays and Dictionaries back, that you can then convert to your domain objects 
in the a next step. With mapping however, these intermediary representations 
are not used and maps or lists are parsed while creating and populating your 
domain objects directly, which should be more efficient. This does of course 
introduce the necessity of adding some form of static typing.

http://www.smalltalkhub.com/#!/~SvenVanCaekenberghe/Neo

Sven


Reply via email to