Been playing around with Abdera a little and was thinking about putting
together a patch to use Jettison for its JSON support [1]. Jettison is a
StAX implementation I wrote for use in CXF that can read/write JSON. It can
do so in different ways as well - like BadgerFish mode and mapped mode. The
current code seems to require a distinct knowledge of all the different Atom
elements and how to serialize it to JSON. With Jettison the idea is you can
just reuse the existing stax code that you have.

I think the one weekness of Jettison currently is that it doesn't have a "no
namespace mode" where it just automatically ignores the namespace. Jettison
has a mapped mode where you can map namespaces to prefixes. So I can map a
namespace http://www.w3.org/2005/Atom to "atom" and it would output json
like "atom.feed". You can also just specify an empty prefix:

Map xmlNsToJSON = new HashMap();
xmlNsToJSON.put("http://www.w3.org/2005/Atom";, "");

XMLStreamWriter writer = new
MappedXMLOutputFactory(xmlNsToJSON).newXMLStreamWriter();
...

And get this out:

{ "feed" : { "title" : "...", "link" : { "@href" : "..." } ... } }

Its not that much work to specify the mapping manually, but a no namespace
mode might be handy if a user has custom extension elements and they just
want to default to having no json prefix

But I digress... To recap: to me the advantages would be:
- No JSON module required in the build
- Different JSON mappings are supported by Jettison
- No need to maintain manual JSON mapping code
- Reading is supported too (currently I only see a JSONWriter...)

Thoughts? I can put together a patch real easy for this. Just wondering if
the patch should rip out the existing JSON support and replace it with
Jettison, if I should add it as an incremental enhancement, or if I should
bugger off :-)

- Dan

1. http://jettison.codehaus.org
--
Dan Diephouse
Envoi Solutions
http://envoisolutions.com | http://netzooid.com/blog

Reply via email to