如何将字符串转换为速度的地图

时间:2014-03-07 02:31:12

标签: velocity

我有类似的东西:

set( $userPrefs = ${subscription.getUserPreferences()} )

getUserPreferences()返回一个字符串,该字符串实际上是一个转义的JSON值。

doing "text" : $userPrefs returns [object]

我看到了一个叫做地图here

的东西

如何转换我的数据,如:

$userPrefs = "{\"a\": \"b\",\"c\": \"d\"}"

进入地图?

由于

2 个答案:

答案 0 :(得分:0)

这样做的正确方法是在您的上下文中放置一个JSON反序列化工具。

这就是说,如果您可以在上下文中访问VelocityTools,那么您确实可以使用$ render工具执行某些操作:

#set($raw = '{"foo":"bar", "baz":5}')
#set($assign = "${esc.hash}set($map = $raw)")
$!render.eval($assign)
#if($map)JSON parsing succeeded: map=$map #else JSON parsong failed #end

但是这种方法看起来相当hackish,加上Velocity文字映射语法并不严格符合JSON,特别是在转义时。您应该而是使用正确的JSON反序列化工具。

答案 1 :(得分:0)

我也可以这样做: - )

Test
#set($raw = '{"foo":"bar", "baz":5}')
#set($assign = "$escapetool.getHash()set($map = $raw)")
#evaluate($assign)
Test (must display bar value) : $map.foo