DynamoDB使ってるとちょくちょくあるシチュエーションかなと思う。DynamoDBはDecimalだけどjsonになおす時にDecimalあると使えないし。
こういうロジック考えると地味に頭使うと思うんだけど、ChatGPTが1秒で考えてくれました。なんか軽く死にたい。しかも結局使わなかった😂
環境
- Python 3.9
ロジック
以下、int, floatは何もせず、Decimalがあったらちゃんとint or floatにかえしてくれるやつ。
def _numeric_to_float_if_possible(value: Any) -> Any:
if isinstance(value, (int, float)):
return value
elif isinstance(value, Decimal):
if value % 1 == 0:
return int(value)
else:
return float(value)
elif isinstance(value, dict):
return {k: _numeric_to_float_if_possible(v) for k, v in value.items()}
elif isinstance(value, list):
return [_numeric_to_float_if_possible(v) for v in value]
else:
return value
ChatGPTは僕よりプログラムがうまい。
jsonになおす時にどうにかしたいだけなら
json.dumps()でエラー出るの防ぎたいだけなんだよね、だったら下のほうが簡単にできる。
def decimal_default_proc(obj):
if isinstance(obj, Decimal):
if obj % 1 == 0:
return int(obj)
return float(obj)
raise TypeError
print(json.dumps({...}, default=decimal_default_proc)
僕の用途だったらこれでよかった😂
参考にさせていただきました。
関連記事
aws の記事
- ---本記事(カテゴリー内最新)---
- [2023年3月21日] motoでDynamoDBのMockを作成する
- [2023年3月18日] DynamoDBのテーブル設計をテキストで記述したいのでChatGPT-4に教えてもらった
- [2022年12月1日] CognitoのIDトークンをLambda関数で検証するサンプルコード
- [2022年7月11日] API Gateway + Cognito Authorizer + Lambda関数でeventから得られるjsonのメモ
- [2022年5月25日] DynamoDBにboto3で操作した時のレスポンス、エラー出る・出ない
- [2022年4月13日] RAK7246にBasic Stationを入れてAWS LoRaWAN NetworkServerに接続
- [2022年1月18日] 2022年1月18日 DyanmoDB、メタバース、アキネータ
- [2021年8月23日] AWS SAMでDynamoDBテーブルを作成する時のテンプレート
- [2021年6月12日] DynamoDBの多対多で隣接リストやった時の冗長性対策どうしよう
- [2021年5月13日] Lambda関数でDeadLetterQueue(DLQ)を試す
Python の記事
- [2023年4月29日] Python3: Ctrl-cで割り込み処理
- ---本記事---
- [2023年3月21日] motoでDynamoDBのMockを作成する
- [2021年11月18日] GKE + Flask で REST API
- [2019年5月23日] SendGridのAPIでPythonライブラリ(6.0.5)を使って添付ファイルを送信する
- [2019年4月4日] C1801: Do not use len(SEQUENCE) to determine if a sequence is empty (len-as-condition)と怒られた時
- [2019年4月3日] Python + SendGrid API でメールを送信する
- [2018年8月21日] boto3でS3にアップロードした画像が、ブラウザで表示するとダウンロードされてしまう時
- [2018年7月27日] Pandasで2列を比較してTrue/Falseの新たな列を作る。さらに1/0へのマッピング
- [2018年7月20日] pythonのpipで入れているもの
- [2018年6月25日] cronのpythonスクリプト内にあるjson.dump()でensure_ascii=Falseにして日本語出力しようとしてハマった
スポンサーリンク