2017-01-04 113 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\""}) 

我知道這是不是最好的解決辦法......但是這是唯一的解決方案,我已經找到。如果你有更好的解決方案,請隨意。