[Python]JSONパース(parse)の基本(lambda、S3)

JSON(JavaScript Object Notation)は、JavaScriptでオブジェクトを表現するための軽量なデータ交換形式です。PythonでもJSONを扱うことができ、その活用例は多岐にわたります。

LambdaでのJSONパースの実装例

Lambdaは、サーバーレスアーキテクチャを実現するためのAWSのサービスです。LambdaでJSONをパースする場合は、次のような実装例が考えられます。

import json
def lambda_handler(event, context):
    json_data = event['json']
    parsed_data = json.loads(json_data)
    
    # ここでparsed_dataを使った処理を行う
    ...

ここでは、Lambdaが受け取るeventオブジェクトからJSONデータを取得し、json.loads()メソッドを使ってパースしています。パースされたデータは、parsed_data変数に格納されます。

LambdaでJSONをパースする際の注意点

LambdaでJSONをパースする際には、次のような注意点があります。

  • JSONデータが大きい場合は、Lambdaのメモリサイズを増やす必要がある
  • JSONデータが壊れている場合には、try-except文を使ってエラー処理を行う
  • パースされたデータが辞書型やリスト型であるため、適切にキャストする必要がある

S3へのJSONデータの保存方法

AWSのS3は、オブジェクトストレージサービスです。S3にJSONデータを保存するには、次のような方法があります。

  1. コンソールから手動でアップロードする
  2. Boto3を使って自動でアップロードする

Boto3を使った自動アップロードの例を示します。

import boto3
import json
s3 = boto3.resource('s3')
def upload_json_to_s3(json_data, bucket_name, key):
    s3_object = s3.Object(bucket_name, key)
    s3_object.put(Body=json_data)
    
if __name__ == '__main__':
    data = {'name': 'John', 'age': 25}
    json_data = json.dumps(data)
    bucket_name = 'my-bucket'
    key = 'data.json'
    upload_json_to_s3(json_data, bucket_name, key)

ここでは、Boto3を使ってS3にJSONデータをアップロードする関数upload_json_to_s3()を定義しています。json.dumps()メソッドを使って、PythonオブジェクトをJSONに変換しています。

S3からのJSONデータの取得とパース

S3からJSONデータを取得するには、S3オブジェクトを取得してBody属性を取得し、json.loads()メソッドを使ってパースします。

import boto3
import json
s3 = boto3.resource('s3')
def download_json_from_s3(bucket_name, key):
    s3_object = s3.Object(bucket_name, key)
    json_data = s3_object.get()['Body'].read().decode('utf-8')
    parsed_data = json.loads(json_data)
    return parsed_data
    
if __name__ == '__main__':
    bucket_name = 'my-bucket'
    key = 'data.json'
    data = download_json_from_s3(bucket_name, key)
    print(data)

ここでは、S3からJSONデータをダウンロードする関数download_json_from_s3()を定義しています。S3オブジェクトのBody属性からJSONデータを取得し、json.loads()メソッドを使ってパースしています。

S3とLambdaを組み合わせたJSONパースの応用例

S3とLambdaを組み合わせて、定期的にJSONデータをパースする処理を実装することもできます。

import boto3
import json
s3 = boto3.resource('s3')
def lambda_handler(event, context):
    bucket_name = 'my-bucket'
    key = 'data.json'
    s3_object = s3.Object(bucket_name, key)
    json_data = s3_object.get()['Body'].read().decode('utf-8')
    parsed_data = json.loads(json_data)
    
    # ここでparsed_dataを使った処理を行う
    ...

ここでは、Lambdaが実行されるたびに、S3からJSONデータを取得してパースする処理を実装しています。

まとめ

PythonでJSONをパースする方法と、LambdaやS3と組み合わせた活用例について紹介しました。JSONを扱う際には、適切なエラー処理やキャストを行うことが重要です。