我有一个对象数组$arr
,一个对象有一个名为jsonData
的属性,它包含一个字符串中的json数据,如何将该字符串解析为实际的JSON对象并检索让我们说的值为键name
?我试过这个:
#foreach ($obj in $arr)
#set ($jsonData = "#evaluate(${obj.jsonData})")
$jsonData.get("name") ## <-- not working
#end
答案 0 :(得分:9)
如果在AWS API Gateway中使用velocity的任何人在此处结束,您可以使用AWS&#39;
$ util.parseJson()将字符串转换为JSON。
请务必注意您的字符串是使用单引号还是双引号。在解析字符串之前,您可能需要使用$ util.escapeJavaScipt.replaceAll()。
答案 1 :(得分:3)
g.o.a.t,你的答案几乎是正确的;您想要使用$util.parseJson()
,而不是$utils.parseJson()
,这是一个轻微的错误。即便如此,它对我帮助很大,所以谢谢你。我会评论你的帖子,但我没有足够的代表。 :(
答案 2 :(得分:1)
修正如下:
#foreach ($obj in $arr)
#set( $jsonData = '#set( $jsonData = ' + $obj.jsonData + ' )' )
#evaluate ($jsonData)
$jsonData.get("name") ##<-- works now
#end
我正在使用velocity 1.7
答案 3 :(得分:0)
这主要是AWS lambda(在 python 中)响应模板相关..所以..如果你想用json返回自定义响应代码,很容易在节点js中返回JSON但是当它到来时据我所知,我们不能将dict作为一个值来提升。所以..这可能会有所帮助。如果你喜欢..
raise Exception({"responseCode": 400, "response": "missing :\"recipientCount\""})
它将在errorMessage键和值中抛出异常作为字符串。
要克服这个......
在方法响应
中添加回复代码400集成响应中的regExp:
.*'responseCode': 400.*
将身体映射模板添加为application / json:
$util.escapeJavaScript( $input.path('$.errorMessage')).replaceAll("\\'",'\"')
确保您没有在例外字符串中使用单引号。
错误:
raise Exception({"responseCode": 400, "response": "missing :'recipientCount'"})
正确:
raise Exception({"responseCode": 400, "response": "missing :\"recipientCount\""})
我知道这不是最佳解决方案......但这是我找到的唯一解决方案。如果你有更好的解决方案,请随意。