juanmeza
juanmeza

Reputation: 163

Convert a string to array in velocity

I have a velocity variable, like this: $cur_record.getFieldValue("SelectRoles", $locale) that is supposed to be an array. If I print its value, (just by putting $cur_record.getFieldValue("SelectRoles", $locale) in the code) i get: ["Accountant","Cashier"]

now, i want to iterate those 2 values, Accountant and Cashier, but it seems to be a String, not an Array, how can i convert that to an array so I can iterate it?..

I have tried to iterate it, but does not work, like this:

#foreach($bla_role in $cur_record.getFieldValue("SelectRoles", $locale))
    $bla_role
#end

Also tried to get the value, as if it were an array, does not work either:

$cur_record.getFieldValue("SelectRoles", $locale).get(0)

I've tried setting it to another variable, like this:

#set($roleval = $cur_record.getFieldValue("SelectRoles", $locale))
$roleval.get(0)

but it does not work, but if i set a string, as the value is printed (the value hard coded), it does work!, like this:

#set($roleval = ["Accountant","Cashier"])
$roleval.get(0)

I dont know if I have to escape something, or I am missing something, can some one help me?

thank you!

Upvotes: 0

Views: 2906

Answers (1)

Tomas Pinos
Tomas Pinos

Reputation: 2862

You're trying to parse a String array that was previously serialized to String.

The following snippet uses substring, split and replace String methods to parse it.

#set($roleval = '["Accountant","Cashier"]')
#set($rolevalLengthMinusOne = $roleval.length() - 1)
#set($roles = $roleval.substring(1, $rolevalLengthMinusOne).split(","))

#foreach($role in $roles)
    <h1>$role.replace('"',"")</h1>
#end

At first I tried to use #evaluate to parse it, but I ended up with these String methods.

Upvotes: 1

Related Questions