You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by erj2code <pe...@tetraconcepts.com> on 2013/10/15 21:47:52 UTC

How do I marshall nested key,value pairs into JSON with Camel and Jackson library?

I have a Java project that currently returns a map to Camel without any
nested key,value pairs, and the Jackson library marshalls it just fine into
JSON using the Jackson library.

For example if I put the following two key,values into a demoMap:

    Map<String,String> demoMap = new TreeMap<String,String>
    demoMap.put("key1","5");
    demoMap.put("key2","10");

I get the following JSON:

    {"key1":"5","key2":"10"}

However, now some of my key,value entries will have an optional visibility
that I need to put as a nested key value in my map.  Any key,values that
don't have an optional visibility will use the default.  So, for example if
I specify visibilities for key1, and key2, but not key3 I want to get JSON
out that looks like this:

    {"key1":"5",
     "key2":"10",
     "key3":"17",
     "visibility" : { "key1": "a&b&!c", "key2": "a&b", "_default": "a" }
    }

How can I get Camel to marshall a Java object with nested key,value pairs? 
I'm a visual learner, so a simple example would be helpful.

I tried changing my Map to have a value as an object i.e.,:

    Map<String,Object> demoMap = new TreeMap<String,Object>

and then tried adding nested key,values for some keys with an ArrayList
using
http://examples.javacodegeeks.com/core-java/json/jackson/convert-java-map-to-from-json-using-jackson-example/
for reference, but realized that this just gives me a bunch of nested values
under a key, not a bunch of nested key,value pairs.

Even when I tried it for grins, I got an error from the Camel processor with
a java.lang.ClassCastException stating java.util.ArrayList cannot be cast to
java.lang.String

And similarly when I tried to nest a Map inside my demoMap I got this
ClassCastException:

    3244 [hello.world.request.timer] ERROR
org.apache.camel.processor.DefaultErrorHandler  - Failed delivery for
exchangeId: e6518e39-89b7-435e-96d9-ce26811ac67e. Exhausted after delivery
attempt: 1 caught: java.lang.ClassCastException: java.util.HashMap cannot be
cast to java.lang.String

So I know how NOT to do it. :-/

I re-read the Camel JSON documentation at http://camel.apache.org/json.html
but as of this writing it doesn't specify an example with nested key,value
pairs.



--
View this message in context: http://camel.465427.n5.nabble.com/How-do-I-marshall-nested-key-value-pairs-into-JSON-with-Camel-and-Jackson-library-tp5741618.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Re: How do I marshall nested key,value pairs into JSON with Camel and Jackson library?

Posted by erj2code <pe...@tetraconcepts.com>.
Yes, that was me.  I asked it both here and there since I didn't know who
would respond more quickly.



--
View this message in context: http://camel.465427.n5.nabble.com/How-do-I-marshall-nested-key-value-pairs-into-JSON-with-Camel-and-Jackson-library-tp5741618p5741665.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Re: How do I marshall nested key,value pairs into JSON with Camel and Jackson library?

Posted by Claus Ibsen <cl...@gmail.com>.
Same question posted on SO
http://stackoverflow.com/questions/19389696/how-do-i-marshall-nested-key-value-pairs-into-json-with-camel-and-jackson-librar



On Tue, Oct 15, 2013 at 9:47 PM, erj2code <pe...@tetraconcepts.com> wrote:
> I have a Java project that currently returns a map to Camel without any
> nested key,value pairs, and the Jackson library marshalls it just fine into
> JSON using the Jackson library.
>
> For example if I put the following two key,values into a demoMap:
>
>     Map<String,String> demoMap = new TreeMap<String,String>
>     demoMap.put("key1","5");
>     demoMap.put("key2","10");
>
> I get the following JSON:
>
>     {"key1":"5","key2":"10"}
>
> However, now some of my key,value entries will have an optional visibility
> that I need to put as a nested key value in my map.  Any key,values that
> don't have an optional visibility will use the default.  So, for example if
> I specify visibilities for key1, and key2, but not key3 I want to get JSON
> out that looks like this:
>
>     {"key1":"5",
>      "key2":"10",
>      "key3":"17",
>      "visibility" : { "key1": "a&b&!c", "key2": "a&b", "_default": "a" }
>     }
>
> How can I get Camel to marshall a Java object with nested key,value pairs?
> I'm a visual learner, so a simple example would be helpful.
>
> I tried changing my Map to have a value as an object i.e.,:
>
>     Map<String,Object> demoMap = new TreeMap<String,Object>
>
> and then tried adding nested key,values for some keys with an ArrayList
> using
> http://examples.javacodegeeks.com/core-java/json/jackson/convert-java-map-to-from-json-using-jackson-example/
> for reference, but realized that this just gives me a bunch of nested values
> under a key, not a bunch of nested key,value pairs.
>
> Even when I tried it for grins, I got an error from the Camel processor with
> a java.lang.ClassCastException stating java.util.ArrayList cannot be cast to
> java.lang.String
>
> And similarly when I tried to nest a Map inside my demoMap I got this
> ClassCastException:
>
>     3244 [hello.world.request.timer] ERROR
> org.apache.camel.processor.DefaultErrorHandler  - Failed delivery for
> exchangeId: e6518e39-89b7-435e-96d9-ce26811ac67e. Exhausted after delivery
> attempt: 1 caught: java.lang.ClassCastException: java.util.HashMap cannot be
> cast to java.lang.String
>
> So I know how NOT to do it. :-/
>
> I re-read the Camel JSON documentation at http://camel.apache.org/json.html
> but as of this writing it doesn't specify an example with nested key,value
> pairs.
>
>
>
> --
> View this message in context: http://camel.465427.n5.nabble.com/How-do-I-marshall-nested-key-value-pairs-into-JSON-with-Camel-and-Jackson-library-tp5741618.html
> Sent from the Camel - Users mailing list archive at Nabble.com.



-- 
Claus Ibsen
-----------------
Red Hat, Inc.
Email: cibsen@redhat.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen