2017-01-04 111 views
1

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

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

回答

1

固定这样的:

#foreach ($obj in $arr) 
    #set($jsonData = '#set($jsonData = ' + $obj.jsonData + ')') 
    #evaluate ($jsonData) 
    $jsonData.get("name") ##<-- works now 
#end 

我用velocity 1.7

4

如果在AWS API网关利用速度人在这里结束了,您可以使用AWS”

$ utils.parseJson()将字符串转换为JSON。

请确保您注意您的字符串是否使用单引号或双引号。在解析字符串之前,您可能需要使用$ utils.escapeJavaScipt.replaceAll()。

1

g.o.a.t,你的回答几乎是正确的;有一个轻微的错字,你想使用$util.parseJson(),而不是$utils.parseJson()。即便如此,它对我的​​帮助非常大,所以谢谢。我会评论你的帖子,但我没有足够的代表。 :(

+0

这为我修好了!谢谢! –

0

这主要是AWS lambda(在python)响应模板相关..所以..如果你想返回自定义响应代码与JSON很容易返回JSON在节点js但是当谈到python按照我知道,我们不能提高字典的值。所以..这可能会有帮助。如果你正在做的一样..

raise Exception({"responseCode": 400, "response": "missing :\"recipientCount\""}) 

它会抛出异常的errorMessage中键和值作为一个字符串。

为了克服这个问题..

添加响应码400 方法响应

正则表达式中合并响应

.*'responseCode': 400.* 

补充身体映射模板为应用程序/ JSON:

$util.escapeJavaScript($input.path('$.errorMessage')).replaceAll("\\'",'\"') 

确保你是不是在异常字符串中使用单引号。

错误

raise Exception({"responseCode": 400, "response": "missing :'recipientCount'"}) 

raise Exception({"responseCode": 400, "response": "missing :\"recipientCount\""}) 

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