Thanks Mike for your reply.

I had not previously seen the velocity tools project. Thanks for pointing that 
out.
 I've had a quick look over the JSONtool javadoc, but can't see anything there 
out of the box to convert to a map.

However I have full control over the context and can easily add a tool to it as 
per your first example.
Thanks for that suggestion. It really will be as simple as...

context.put("jsonTool", new JsonTool());

Thanks again. Net Wolf.

On February 3, 2020 7:00:26 PM UTC, Mike Kienenberger <mkien...@gmail.com> 
wrote:
>What you typically do is insert a "tool" (which is a POJO -- any java
>class instance) into your context, then call a method on that tool to
>do something.
>
>How you insert the tool depends how you use Velocity (do you set it up
>programmatically in java? using velocity tools?  using ant? etc).
>
>After the tool is in the context, you would do something like this:
>
>#set ($mapping = $jsonTool.convertJSONStringToJavaMap($userid) )
>
>This assumes that the object you inserted as "jasonTool" has a method
>signature like this:
>
>public Map convertJSONStringToJavaMap(UserIdType userid)
>
>Note that there is nothing special about an object inserted as a tool
>or about the methods on the tool.
>
>The documentation here is probably a good place to start learning
>about tools, although you do not have to use this approach to insert a
>tool:
>
>https://velocity.apache.org/tools/devel/
>
>Also, it does look like VelocityTools already has a JSON tool object
>-- Maybe it already does what you want without any effort on your
>part.
>
>But you can also insert tools as simply as
>
>context.put("jsonTool", new JsonTool());
>
>
>
>On Mon, Feb 3, 2020 at 2:31 AM Net Wolf <netwol...@gmail.com> wrote:
>>
>> Hi.
>>
>> I'm hoping to extend Velocity to be able to convert a JSON string to
>a Java Map so that template authors can map values in Velocity.
>>
>> Something like:
>> # set mappings = JsonToMap ($jsonString)
>> # set username = $mappings($userid)
>>
>> I thought I could just write a directive for JsonToMap but directives
>seem to return a string rather than a map.
>>
>> Alternatively could I add a method in the context somehow? Perhaps I
>could then call something like...
>>
>> # set username = $jsonString.toMap().get($userid)
>>
>> Sorry if I've misunderstood something fundamental in velocity. I'm
>interested in receiving some guidance on the best way to do this sort
>of conversion.
>>
>> Thanks in advance.
>> Net Wolf
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: user-unsubscr...@velocity.apache.org
>For additional commands, e-mail: user-h...@velocity.apache.org

-- 
Sent from my Android device with K-9 Mail. Please excuse my brevity.

Reply via email to