On Mon, Sep 11, 2017 at 2:05 AM, chetan choulwar <[email protected]> wrote: > Hello Tatu, > > I found this post on stackoverflow which matches the exact scenario I was > trying to explain you. It says: The actual JSON response I'm trying to parse > is very complex, and I don't want to have to create an entire new class for > every sub-node, even though I only need a single field. > This page led me to a library called Elastic Path's JSON Unmarshaller . It > will solve my problem, but just wanted to make sure with you if this library > is stable and recommended? > Please comment on this. > > Thanks a lot..!
That sounds like a potentially useful library. I have had good experiences with Elastic Search in general, although I am not familiar with this specific component. It does support kind of transformations so if it seems to match your use case you may want to use it. I can't comment on stability, but as I said Elastic project has been pretty good from all I know so I would expect it to work as advertised. I hope this helps, -+ Tatu +- > > > > On Monday, September 11, 2017 at 12:55:28 AM UTC+5:30, chetan choulwar > wrote: >> >> You can consider my API as a proxy for connecting to different APIs >> providing similar kinda data represented in somewhat different way than each >> other. >> >> On Sunday, September 10, 2017 at 10:00:21 PM UTC+5:30, Tatu Saloranta >> wrote: >>> >>> On Sat, Sep 9, 2017 at 9:58 PM, chetan choulwar <[email protected]> >>> wrote: >>> > That @JsonAlias worked fine. But my problem is with nested elements, >>> > how can >>> > I specify nested json element into alias? >>> >>> You can't. If your structures differ beond just naming you need to do >>> something else. >>> Databinding is meant to match incoming document structure to a Java >>> object graph and vice versa. >>> It is not designed to allow arbitrary transformation, or unification >>> of differing structures into single model. >>> >>> It is possible to unify differing structures, of course, but that is >>> true transformation and something explicitly >>> out of scope for Jackson. You can use `JsonNode` as structure modify, >>> for input and output structures, and it is possible >>> to change structure any way you want. But you have to write that >>> transformation yourself. >>> Or you can use separate Java classes for input(s) and output. >>> >>> > And reason for doing so is that I'm writing an API that will send the >>> > common >>> > response out of all these different APIs I am calling from my API. >>> >>> I am still not sure I fully understand your usage, still; this is very >>> generic explanation. >>> >>> But assuming I do understand... if input data you get from a service >>> differs, you should consider separating handling of your input from >>> constructing your output. Do not try to use same set of objects if >>> structures are not same or similar enough. Trying to do that is false >>> savings and tends to sacrifice clean design for seeming savings. >>> >>> This assuming I actually understood what you are trying to do -- >>> without full explanation of steps from calling another service to >>> formulating output it is possible to misunderstand intent. >>> >>> > Apart from this it'd be great if you can you mail me a link where I can >>> > find >>> > latest documentation and hands-on for the same. >>> > >>> > Thanking you in anticipation..! >>> >>> Documentation hub is at: >>> >>> https://github.com/FasterXML/jackson-docs >>> >>> and main portal >>> >>> https://github.com/FasterXML/jackson/ >>> >>> has some links. >>> >>> -+ Tatu +- >>> >>> >>> >>> > >>> > >>> > On Sunday, September 10, 2017 at 9:21:55 AM UTC+5:30, Tatu Saloranta >>> > wrote: >>> >> >>> >> On Fri, Sep 8, 2017 at 5:13 AM, chetan choulwar <[email protected]> >>> >> wrote: >>> >> > Thanks a lot for your input. I tried it and it worked as expected. >>> >> > But >>> >> > I'm >>> >> > stuck at a situation where I want to retrieve a value from nested >>> >> > block, >>> >> > so >>> >> > can you help me out? >>> >> > For example, >>> >> > By calling REST API "https://xyz.com/resources/resource" gives me { >>> >> > >>> >> > "value"={"name":"abc.txt"} >>> >> > >>> >> > } >>> >> > and calling "https://abc.com/resources/resource" gives me >>> >> > {"title":"idontknow.txt"} >>> >> > now how can I take name out from the first json response? >>> >> > >>> >> > Once again thanks a lot for your answer..!:) >>> >> >>> >> I am not sure why my first answer wouldn't work here. All you are >>> >> doing is specifying that property name in json is an alias that can be >>> >> used for property in POJO, so you would access it with field name (or >>> >> getter) you have. >>> >> >>> >> But at the same time if these are effectively different objects it is >>> >> unclear why same Java class should be used anyway -- perhaps they >>> >> should use different POJOs. >>> >> >>> >> -+ Tatu +- >>> >> >>> >> >>> >> > >>> >> > On Friday, September 8, 2017 at 9:19:49 AM UTC+5:30, Tatu Saloranta >>> >> > wrote: >>> >> >> >>> >> >> On Thu, Sep 7, 2017 at 5:24 AM, chetan choulwar >>> >> >> <[email protected]> >>> >> >> wrote: >>> >> >> > Hi All, >>> >> >> > >>> >> >> > I'm calling different REST APIs and getting different kinda JSON >>> >> >> > responses; >>> >> >> > is there any way to pick particular attribute from different JSON >>> >> >> > responses >>> >> >> > and map it to a one common property of defined POJO (Resource for >>> >> >> > my >>> >> >> > API) >>> >> >> > that can then be sent as a response from the REST API that I've >>> >> >> > exposed? >>> >> >> > >>> >> >> > For Example: >>> >> >> > By calling REST API "https://xyz.com/resources/resource" gives me >>> >> >> > {"name":"abc.txt"} >>> >> >> > and calling "https://abc.com/resources/resource" gives me >>> >> >> > {"title":"idontknow.txt"} >>> >> >> > >>> >> >> > And I have one resource class defined for my APIs to return i.e. >>> >> >> > MyResource >>> >> >> > { >>> >> >> > String fileName; >>> >> >> > } >>> >> >> > >>> >> >> > So is there any way that I can map "name"/"title" to fileName >>> >> >> > i.e. >>> >> >> > how >>> >> >> > can I >>> >> >> > use jackson to deserialize these jsons to MyResource type? >>> >> >> > >>> >> >> > Please let me know if this is valid? and if yes, how? >>> >> >> >>> >> >> If you have many different names to use, it may be simpler to just >>> >> >> bind JSON to `Map` or `JsonNode`, and extract value explicitly. >>> >> >> >>> >> >> But if there are just couple of values, you can use `@JsonAlias` >>> >> >> like: >>> >> >> >>> >> >> public class POJO { >>> >> >> @JsonAlias({ "name", "title" }) >>> >> >> public String fileName; >>> >> >> } >>> >> >> >>> >> >> which would then accept alternate names "name" and "title", but >>> >> >> serialize as "fileName" (which it also accepts). >>> >> >> This annotations was added in Jackson 2.9 >>> >> >> >>> >> >> -+ Tatu +- >>> >> > >>> >> > -- >>> >> > You received this message because you are subscribed to the Google >>> >> > Groups >>> >> > "jackson-dev" group. >>> >> > To unsubscribe from this group and stop receiving emails from it, >>> >> > send >>> >> > an >>> >> > email to [email protected]. >>> >> > For more options, visit https://groups.google.com/d/optout. >>> > >>> > -- >>> > You received this message because you are subscribed to the Google >>> > Groups >>> > "jackson-dev" group. >>> > To unsubscribe from this group and stop receiving emails from it, send >>> > an >>> > email to [email protected]. >>> > For more options, visit https://groups.google.com/d/optout. > > -- > You received this message because you are subscribed to the Google Groups > "jackson-dev" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "jackson-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
