> -----Original Message----- > From: KARR, DAVID (ATTCINW) > Sent: Thursday, October 01, 2009 9:28 AM > To: [email protected] > Subject: RE: How to make clean json, instead of xml-ish json? > > > -----Original Message----- > > From: KARR, DAVID (ATTCINW) > > > > I have a REST prototype using CXF that produces reasonable looking > XML, > > and almost reasonably looking JSON. The JSON it produces is > "xml-ish". > > > > For instance, the sample XML I get is the following: > > > > <Item> > > <description>def</description> > > <features> > > <feature>123</feature> > > <feature>456</feature> > > </features> > > <id>1</id> > > <title>abc</title> > > </Item> > > > > The JSON is this: > > > > > {"Item":{"description":"def","features":{"feature":[123,456]},"id":1,"t > > i > > tle":"abc"}} > > > > A nicer JSON result would have been this: > > > > > {"Item":{"description":"def","features":[123,456],"id":1,"title":"abc"} > > } > > > > Is it possible to modify just the JSON results, but still have the > "out > > of the box" XML results? > > Related to this, I noticed the "Dealing with JSON array serialization > issues" section in the user guide. I have a feeling this is telling me > that setting "serializeAsArray" and "arrayKeys" in my JSONProvider. > I'm > building a test for this now. Even if this works, I'd have to say that > this documentation could use a clearer explanation of this, perhaps > with > more fully-elaborated examples. The documentation for this is quite > brief. Full examples showing "before" and "after" would be useful. > There is a link to another example that supposedly provides more info, > but it only shows the beans.xml file, without any elaboration or > example.
My change to "serializeAsArray" and "arrayKeys" in a JSONProvider didn't do anything. The JSON output didn't change. The following are the relevant pieces of my beans.xml file: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:util="http://www.springframework.org/schema/util" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:cxf="http://cxf.apache.org/core" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd http://cxf.apache.org/core http://cxf.apache.org/schemascore.xsd"> <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml" /> <jaxrs:server name="restcatalogserver" address="/rest"> <jaxrs:features> <cxf:logging/> </jaxrs:features> <jaxrs:providers> <ref bean="jsonProvider"/> </jaxrs:providers> <jaxrs:serviceBeans> <ref bean="catalog"/> </jaxrs:serviceBeans> </jaxrs:server> <bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.JSONProvider"> <property name="serializeAsArray" value="true"/> <property name="arrayKeys"> <list> <value>features</value> </list> </property> </bean> <bean id="catalog" class="com.att.ecom.catalog.Catalog"> </bean> </beans>
