1. ホーム
  2. python

[解決済み] JSONデータを文字列として返すAWS Lambda

2022-02-10 04:29:32

質問内容

AWS Lambdaを使ってAPIを作成しているのですが、配列のデータをJSON形式で返したいのです。しかし、ラムダを呼び出すと、必要なJSONデータを返すことができますが、それは二重引用符で囲まれた文字列として来るのです。Python IDEで同じコードを実行してみると、すべてうまくいきますが、ラムダでそれを返そうとすると、文字列として来るのです。 これは、Lambda が return 文は、Pythonの関数の中にあるのでしょうか? これは私のLambdaでデータを返す方法です。

return {
            'statusCode': 200,
            'headers': {
            "Access-Control-Allow-Origin": "*",
            "Access-Control-Allow-Methods": 'GET, POST, PUT, DELETE, OPTIONS'
            },
            'body': json.dumps(json_data,default = myconverter)
        }

ここで json_data はpythonのリストで、ユーザーから渡された特定のユニークIDについてデータベースから取得されたデータが入力されます。 myconverter は、私が書いたJSONエンコーダーです。

得ている出力は

{
  "statusCode": 200,
  "headers": {
    "Access-Control-Allow-Origin": "*",
    "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS"
  },
  "body": "[{\"Dp_Record_Id\": 2, \"DP_TYPE\": \"NSDL\", \"DP_ID\": \"40877589\", \"CLIENT_ID\": \"1232\", \"Default_flag\": \"Y\"}]"
}

ここでは "body" のように、二重引用符を付けずにデータの配列だけを返すようにします。

"body": [{\"Dp_Record_Id\": 2, \"DP_TYPE\": \"NSDL\", \"DP_ID\": \"40877589\", \"CLIENT_ID\": \"1232\", \"Default_flag\": \"Y\"}]

これが可能かどうか、どうすれば可能か教えてください。 どんなことでもご相談ください。

解決方法は?

を実行すればよいのです。 'body': json_data . 今、私のλ関数でテストしてみました。

ラムダ関数

import json

def lambda_handler(event, context):

    json_data = [{"Dp_Record_Id": 2, 
                  "DP_TYPE": "NSDL",
                  "DP_ID": "40877589", 
                  "CLIENT_ID": "1232", 
                  "Default_flag": "Y"}]

    return {'statusCode': 200,
            'headers': {
            "Access-Control-Allow-Origin": "*",
            "Access-Control-Allow-Methods": 'GET, POST, PUT, DELETE, OPTIONS'
            },
            'body': json_data
        }    

結果

Response:
{
  "statusCode": 200,
  "headers": {
    "Access-Control-Allow-Origin": "*",
    "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS"
  },
  "body": [
    {
      "Dp_Record_Id": 2,
      "DP_TYPE": "NSDL",
      "DP_ID": "40877589",
      "CLIENT_ID": "1232",
      "Default_flag": "Y"
    }
  ]
}