2017-05-23 3 views
2

dictlist、通常のデータ型、およびdecimal.Decimalというネストされたオブジェクトがあります。このオブジェクトをPyongongoでMongoDBに挿入したいと思います。 PyMongoはDecimal.decimalを挿入することを拒否しているので、Decimal.decimalstringにすべて変換したいと思います。ネストされたdict/list内のDecimal.decimalvaluesを変換する

以前はson_manipulatorでこれを行うことができましたが、今はdeprecatedです。

ネストされたデータ構造内のすべてのdecimal.Decimalオブジェクトをstringに効率的に変換できますか?

+0

私は確かにチェックするのが怠惰ですが、 "廃止予定ですか?ドキュメンテーションはそのようにマークされていません。私が知っていることを知っている['eval'](http://api.mongodb.com/python/current/api/pymongo/database.html#pymongo.database.Database.eval)のようなものは明確にマークされています。したがって、実際に使用が非推奨の警告を返す場合は、ドキュメンテーションを修正する必要があります。そうでない場合、なぜあなたはこれが推奨されなくなったと思いますか? –

+0

申し訳ありませんが、間違ったページにリンクしました。 http://api.mongodb.com/python/current/examples/custom_type.htmlで推奨されなくなりました。修正するための編集 –

+0

良い点。使用法を考慮すると、非推奨はもちろん意味があります。おそらくJIRAで、あなたが参照したオリジナルのドキュメントページ(http://api.mongodb.com/python/current/api/pymongo/son_manipulator)に明確な通知を加えるべきでしょう。 –

答えて

1

AmazonのDynamoDBとboto3の問題とまったく同じです。

def replace_decimals(obj): 
    if isinstance(obj, list): 
     for i in xrange(len(obj)): 
      obj[i] = replace_decimals(obj[i]) 
     return obj 
    elif isinstance(obj, dict): 
     for k in obj.iterkeys(): 
      obj[k] = replace_decimals(obj[k]) 
     return obj 
    elif isinstance(obj, decimal.Decimal): 
     return str(obj) 
     # In my original code I'm converting to int or float, comment the line above if necessary. 
     if obj % 1 == 0: 
      return int(obj) 
     else: 
      return float(obj) 
    else: 
     return obj 
関連する問題