2017-08-05 195 views
-1

我哈瓦其被連接到AWS-LAMBDA寫入JAVA.in API網關集成響應的內部我通過從上下文變量一些JSON字符串和 像下面AWS API網關和LAMBDA功能

#set($inputRoot = $input.path('$')) 
{ 
    "UserID":"$context.authorizer.claims.sub", 
    "Identity":"$context.identity.cognitoIdentityId", 
    "Account ID":"$context.identity.accountId", 
    "UserID2":"$context.authorizer.claims.email" 
} 
一個AWS API

但在我的lambda函數中,我嘗試讀取這些值如下。

context.getLogger().log("Input or Query String"+ input); 

它讀取的是完整的文本,但不是json格式的問題,它給了我一個像下面的格式。

Input or Query String{UserID=379fa501-0028-XXXX-a1c2-f0c54691b4d3, Identity=XX, Account ID=XX, [email protected]} 

如何將其轉換爲json格式..?

回答

1

AWS傳遞給Java Lambda函數的JSON將是Map<String, Object>類型的Map。記錄器類將傳入對象序列化爲一個字符串,因此,當您查看日誌中的輸入時,它看起來像是一個json字符串,即使它不是。

試試這個:

public class LambdaFunctionHandler implements RequestHandler<Object, Object>{ 

    @Override 
    public Object handleRequest(Object input, Context context) { 
     Map<String, Object> mappedInput = (Map<String, Object>)input; 
     context.getLogger().log("User ID: " + mappedInput.get("UserID")); 
    } 

你會明顯地要使用比我在這裏包含更多的類型檢查。

+0

謝謝先生。它是驚人的人幫助那些從未見過的人。它的工作原理與此類似。如果我有像{{Person}:{「Name」:「xxxx」,年齡:「xx」}}的json對象, –

+0

每個傳入的JSON對象都以Map的形式傳入,因此在您的情況下,輸入映射將包含一個帶有「Person」鍵的對象。該對象反過來將是一個帶有「名稱」鍵和「年齡」鍵的地圖。 –