Les dictionnaires JSON et Python sont mappés comme suit:
JSON | Python |
---|---|
object | dict |
array | list |
string | unicode |
number (int) | int, long |
number(real) | float |
true | True |
false | False |
null | None |
Par conséquent, si vous analysez JSON avec json.loads ()
et que vous l'enregistrez avec dynamo.put_item ()
tel quel, il sera enregistré avec le type ci-dessus. À ce stade, s'il existe un type float, il se met en colère comme suit.
Float types are not supported. Use Decimal types instead.
Les flottants Python ne peuvent pas être enregistrés dans DynamoDB tels quels. Vous devez plutôt vous inscrire avec Decimal.
Float doit être mappé sur Decimal. Par exemple, supposons que les données suivantes soient enregistrées.
json_data
{"Timestamp": "20160323T203501.000+0900", "x": -0.279938, "y": -0.754028, "z": -0.607758 }
Lors de l'analyse de JSON, ajoutez parse_float = decimal.Decimal
comme indiqué ci-dessous.
import json
import boto3
import decimal
#...réduction
item = json.loads(json_data, parse_float=decimal.Decimal)
dynamo = boto3.resource('dynamodb').Table('ThisIsJustTest')
dynamo.put_item(Item = item)
Cela a été mentionné dans le document officiel de Python, mais je n'ai pas obtenu d'informations tout de suite, alors je l'ai écrit sous forme d'article.
https://docs.python.org/2/library/json.html#encoders-and-decoders
parse_float, if specified, will be called with the string of every JSON float to be decoded. By default, this is equivalent to float(num_str). This can be used to use another datatype or parser for JSON floats (e.g. decimal.Decimal).
json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])
C'était également fluide dans la documentation AWS. https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/gettingstartedguide/GettingStarted.Python.02.html
Les méthodes suivantes sont introduites.
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/gettingstartedguide/GettingStarted.Python.03.html http://stackoverflow.com/questions/1960516/python-json-serialize-a-decimal-object
Recommended Posts