この記事は最終更新日から1年以上が経過しています。
    
DynamoDBから怒られる
Boto3を使ってDynamoDBにデータを入れようとしました。
下記のようなものです。
| {     'accountId': '12345',     'date': '2017-09-20',     'list': ['aaa', 'a', ''],     'name': 'aaa' } | 
結果、
| botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the PutItem operation: One or more parameter values were invalid: An AttributeValue may not contain an empty string | 
怒られました。
そこで
下記のような関数をつくりました。辞書オブジェクト(登録するJSON)を引数で与えて、空文字をNoneで上書きます。
| def emptystr_to_none(item):     for k, v in item.items():         if isinstance(v, dict):             TrustedAdvisorCheck.json_parse(v)         elif isinstance(v, list):             for i in range(len(v)):                 list_elem = v[i]                 if isinstance(list_elem, str):                     if list_elem == '':                         v[i] = None                 elif isinstance(list_elem, list) or isinstance(list_elem, dict):                     TrustedAdvisorCheck.json_parse(list_elem)         elif isinstance(v, str):             if v == '':                 item[k] = None     return item | 
結果
下記のように変換して、登録できました。
| {     'accountId': '12345',     'date': '2017-09-20',     'list': ['aaa', 'a', None],     'name': 'aaa' } | 
この記事を書いた人

最近書いた記事
 2017.11.13Boto3を使ったら空文字のままだとDynamoDBにデータが入れられなかった話 2017.11.13Boto3を使ったら空文字のままだとDynamoDBにデータが入れられなかった話
 2017.08.24Pythonでユニットテスト書いてみる 2017.08.24Pythonでユニットテスト書いてみる
 2017.06.20Pythonで設定ファイルを読み込んでみる(YAMLファイル) 2017.06.20Pythonで設定ファイルを読み込んでみる(YAMLファイル)
 2017.05.22PythonでXMLの要素を削除する 2017.05.22PythonでXMLの要素を削除する









