以速度将字符串转换为数组

Convert a string to array in velocity

我有一个速度变量,像这样: $cur_record.getFieldValue("SelectRoles", $locale) 那应该是一个数组。如果我打印它的值,(只需将 $cur_record.getFieldValue("SelectRoles", $locale) 放在代码中)我得到: ["Accountant","Cashier"]

现在,我想迭代这 2 个值,Accountant 和 Cashier,但它似乎是一个字符串,而不是一个数组,我如何将它转换为一个数组以便我可以迭代它?..

我试过迭代它,但不起作用,像这样:

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

也试过取值,好像是数组一样,也不行:

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

我试过将它设置为另一个变量,如下所示:

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

但它不起作用,但如果我设置一个字符串,当值被打印时(该值被硬编码),它确实起作用!,就像这样:

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

我不知道我是否必须逃避某些东西,或者我错过了什么,有人可以帮助我吗?

谢谢!

您正在尝试解析之前序列化为字符串的字符串数组。

以下代码段使用 substringsplitreplace 字符串方法对其进行解析。

#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

起初我尝试使用 #evaluate 来解析它,但我最终使用了这些 String 方法。