将字符串解析为JSON

时间:2017-01-04 18:54:35

标签: velocity template-engine

我有一个对象数组$arr,一个对象有一个名为jsonData的属性,它包含一个字符串中的json数据,如何将该字符串解析为实际的JSON对象并检索让我们说的值为键name?我试过这个:

#foreach ($obj in $arr)
    #set ($jsonData = "#evaluate(${obj.jsonData})")
    $jsonData.get("name")  ## <-- not working
#end

4 个答案:

答案 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\""})

我知道这不是最佳解决方案......但这是我找到的唯一解决方案。如果你有更好的解决方案,请随意。