You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ofbiz.apache.org by Al Byers <by...@automationgroups.com> on 2008/05/22 17:49:06 UTC

Upgrading json-lib

Has anyone else felt a need to update the version of json-lib? It is in
webapp and is at 0.9, whereas I am at version 2.2.1 for jdk1.5 (there is a
separate version for 1.3 ???). As important as json will as more and more
work in done with ajax, it would seem that an upgrade would be in order.
There are only two places I see that would be affects - in two event
handlers that use JSONObject.fromMap where the new syntax is
JSONObject.fromObject.

One important thing that the  latest version brings is a plug-in system for
dealing with complex object, primarily date fields. I will post more about
this below. I realize that having two versions for 1.5 and 1.3 is not
desirable. The 1.3 version is upwards compatible, so I suppose it is the way
to go.

-Al

For anyone who stumbles on the email searching for json info, I am going to
paste in a post I made on the Dojo site, just in case it is helpful.

...

json-lib has a way to plug-in support for custom conversions.

Here is the code that I use to "plug-in" custom support:
...
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor( java.sql.Timestamp.class, new
TimestampJsonValueProcessor() );
boolean isMap = serviceContext instanceof Map;
JSONObject json = JSONObject.fromObject(serviceContext, jsonConfig);
String jsonStr = json.toString();
...
and here is the code for TimestampJsonValueProcessor:

public class TimestampJsonValueProcessor implements JsonValueProcessor {

public TimestampJsonValueProcessor() {
}

public Object processArrayValue( Object value, JsonConfig jsonConfig ) {
return process( value, jsonConfig );
}

public Object processObjectValue( String key, Object value, JsonConfig
jsonConfig ) {
return process( value, jsonConfig );
}

private Object process( Object value, JsonConfig jsonConfig ) {
Calendar c = Calendar.getInstance();
c.setTime( (Date) value );
JSONObject jsonObjectValue = new JSONObject().element( "year", c.get(
Calendar.YEAR ) )
.element( "month", c.get( Calendar.MONTH ) )
.element( "day", c.get( Calendar.DAY_OF_MONTH ) )
.element( "hours", c.get( Calendar.HOUR_OF_DAY ) )
.element( "minutes", c.get( Calendar.MINUTE ) )
.element( "seconds", c.get( Calendar.SECOND ) )
.element( "milliseconds", c.get( Calendar.MILLISECOND ) );

// This method works, too
JSONObject jsonObjectValue2 = JSONObject.fromObject(value, jsonConfig);
JSONObject jsonObject = new JSONObject().element("_type",
"Date").element("_value", jsonObjectValue);

return jsonObject;
}
}

Hope this helps.
...
The Dojo Toolkit has a data store object which is a nice vehicle for
communicating back and forth with the server. It is one feature that should
be evaluated in comparing javascript toolkits. The grid object is another
big one.

Re: Upgrading json-lib

Posted by Adrian Crum <ad...@hlmksw.com>.
As long as it works with the latest version of Prototype, it's fine with me.

-Adrian

Al Byers wrote:
> Has anyone else felt a need to update the version of json-lib? It is in
> webapp and is at 0.9, whereas I am at version 2.2.1 for jdk1.5 (there is a
> separate version for 1.3 ???). As important as json will as more and more
> work in done with ajax, it would seem that an upgrade would be in order.
> There are only two places I see that would be affects - in two event
> handlers that use JSONObject.fromMap where the new syntax is
> JSONObject.fromObject.
> 
> One important thing that the  latest version brings is a plug-in system for
> dealing with complex object, primarily date fields. I will post more about
> this below. I realize that having two versions for 1.5 and 1.3 is not
> desirable. The 1.3 version is upwards compatible, so I suppose it is the way
> to go.
> 
> -Al
> 
> For anyone who stumbles on the email searching for json info, I am going to
> paste in a post I made on the Dojo site, just in case it is helpful.
> 
> ...
> 
> json-lib has a way to plug-in support for custom conversions.
> 
> Here is the code that I use to "plug-in" custom support:
> ...
> JsonConfig jsonConfig = new JsonConfig();
> jsonConfig.registerJsonValueProcessor( java.sql.Timestamp.class, new
> TimestampJsonValueProcessor() );
> boolean isMap = serviceContext instanceof Map;
> JSONObject json = JSONObject.fromObject(serviceContext, jsonConfig);
> String jsonStr = json.toString();
> ...
> and here is the code for TimestampJsonValueProcessor:
> 
> public class TimestampJsonValueProcessor implements JsonValueProcessor {
> 
> public TimestampJsonValueProcessor() {
> }
> 
> public Object processArrayValue( Object value, JsonConfig jsonConfig ) {
> return process( value, jsonConfig );
> }
> 
> public Object processObjectValue( String key, Object value, JsonConfig
> jsonConfig ) {
> return process( value, jsonConfig );
> }
> 
> private Object process( Object value, JsonConfig jsonConfig ) {
> Calendar c = Calendar.getInstance();
> c.setTime( (Date) value );
> JSONObject jsonObjectValue = new JSONObject().element( "year", c.get(
> Calendar.YEAR ) )
> .element( "month", c.get( Calendar.MONTH ) )
> .element( "day", c.get( Calendar.DAY_OF_MONTH ) )
> .element( "hours", c.get( Calendar.HOUR_OF_DAY ) )
> .element( "minutes", c.get( Calendar.MINUTE ) )
> .element( "seconds", c.get( Calendar.SECOND ) )
> .element( "milliseconds", c.get( Calendar.MILLISECOND ) );
> 
> // This method works, too
> JSONObject jsonObjectValue2 = JSONObject.fromObject(value, jsonConfig);
> JSONObject jsonObject = new JSONObject().element("_type",
> "Date").element("_value", jsonObjectValue);
> 
> return jsonObject;
> }
> }
> 
> Hope this helps.
> ...
> The Dojo Toolkit has a data store object which is a nice vehicle for
> communicating back and forth with the server. It is one feature that should
> be evaluated in comparing javascript toolkits. The grid object is another
> big one.
>