Re: [json-lib-user] Problems with .toJava
Brought to you by:
aalmiray
|
From: Kiril <kir...@gm...> - 2008-05-13 06:59:13
|
Hi Andres,
Thank you for the reply.
I tested this, and it works!
I noticed that by creating the object as below, you can omit the need for
the Map:
JSONObject jsonObject = new JSONObject();
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setRootClass( MyBean.class );
jsonObject = (JSONObject)JSONSerializer.toJSON(jsonString);
MyBean myBean = (MyBean)JSONSerializer.toJava(jsonObject,
jsonConfig);
Also, the example misses one line:
MorpherRegistry morpherRegistry = JSONUtils.getMorpherRegistry();
Again, thanks a lot!
On Sat, May 10, 2008 at 11:42 AM, Andres Almiray <aal...@ya...> wrote:
> Hi Kiril,
>
> That code would surely work but ties your domain to Json-lib, the docs (
> http://json-lib.sourceforge.net/usage.html) include an alternative
> solution to your problem: registering a BeanMorpher.
>
>
> 1. class MyBean{
> 2. private List data;
> 3. // getters & setters
> 4. }
> 5.
> 6. class Person{
> 7. private String name;
> 8. // getters & setters
> 9. }
> 10.
> 11. ...
> 12.
> 13. String json = "{'data':[{'name':'Wallace'},{'name':'Grommit'}]}"
> ;
> 14. Map classMap = new HashMap();
> 15. classMap.put( "data", Person.class );
> 16.
> MyBean bean = JSONObject.toBean( JSONObject.fromObject(json), MyBean.
> class, classMap );
>
>
> 1. Morpher dynaMorpher = new BeanMorpher( Person.class
> , JSONUtils.getMorpherRegistry() );
> 2. morpherRegistry.registerMorpher( dynaMorpher );
> 3. List output = new ArrayList();
> 4. for( Iterator i = bean.getData().iterator(); i.hasNext(); ){
> 5. output.add( morpherRegistry.morph( Person.class
> , i.next() ) );
> 6. }
> 7. bean.setData( output );
>
> Cheers,
> Andres
>
> -------------------------------------------
> http://jroller.com/aalmiray
> http://www.linkedin.com/in/aalmiray
> --
> What goes up, must come down. Ask any system administrator.
> There are 10 types of people in the world: Those who understand binary,
> and those who don't.
> To understand recursion, we must first understand recursion.
>
>
> ----- Original Message ----
> From: Kiril <kir...@gm...>
> To: jso...@li...
> Sent: Saturday, May 10, 2008 12:54:57 AM
> Subject: Re: [json-lib-user] Problems with .toJava
>
> Ok,
>
> I'm not a newbie anymore :)
>
> Here is the solution, if anyone is interested. I modified the setter in
> the root class for the list of children (Group classes):
>
> public void setGroups(List<Group> groups) {
> for(int i=0; i < groups.size(); i++) {
> Group grp = null;
> BeanMorpher mrph = new BeanMorpher(Group.class,
> JSONUtils.getMorpherRegistry());
> grp = (Group)mrph.morph(groups.get(i));
> this.groups.add(grp);
> }
> }
>
> Yahoo!!!... Works!
>
>
> On Sat, May 10, 2008 at 2:55 AM, Kiril <kir...@gm...> wrote:
>
> > May be attaching the json string will help:
> >
> >
> > {"groups":[{"comparison":"And","fields":[{"comparison":"Near","field":"subject","values":["Daily","Report"]},{"comparison":"Equals","field":"message","values":["November"]}],"nextGroupComparison":"Or"},{"comparison":"Null","fields":[{"comparison":"Equals","field":"message","values":["October"]}],"nextGroupComparison":"Null"}],"revision":0,"version":1}
> >
> >
> > On Sat, May 10, 2008 at 2:54 AM, Kiril <kir...@gm...> wrote:
> >
> > > Hi all,
> > >
> > > I'm newbie to json-lib.
> > > I want to use it to serialize a class with a List<Class>, containing
> > > number of subclasses.
> > >
> > > While toJSON works fine, passing back the same string to toJava works
> > > only partially - the root class is generated Ok, but the children, in the
> > > List are MorphDynaBean's.
> > >
> > > Here is the code:
> > >
> > > JSONUtils.getMorpherRegistry().registerMorpher(new
> > > EnumMorpher(GroupComparison.class));
> > > JSONUtils.getMorpherRegistry().registerMorpher(new
> > > EnumMorpher(NextGroupComparison.class));
> > > JSONUtils.getMorpherRegistry().registerMorpher(new
> > > EnumMorpher(FieldComparison.class));
> > > JSONObject jsonObject = new JSONObject();
> > > JsonConfig jsonConfig = new JsonConfig();
> > > jsonConfig.setRootClass( Filter.class );
> > > jsonConfig.setEnclosedType(List.class);
> > > jsonObject =
> > > (JSONObject)JSONSerializer.toJSON(jsonString);
> > > Filter filter = (Filter)JSONSerializer.toJava(jsonObject,
> > > jsonConfig);
> > >
> > > The Filter class contains List of Group classes, but these are
> > > generated as a MorphDynaBean...
> > >
> > > Thanks in advance for any help!
> > >
> > > Kiril.
> > >
> >
> >
>
> ------------------------------
> Be a better friend, newshound, and know-it-all with Yahoo! Mobile. Try it
> now.<http://us.rd.yahoo.com/evt=51733/*http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ>
>
|