【问题标题】:Converting a MongoDB Query String with Datetime field into Dict in Python在 Python 中将带有 Datetime 字段的 MongoDB 查询字符串转换为 Dict
【发布时间】:2016-02-25 08:32:41
【问题描述】:

我有一个字符串如下, s= "query : {'$and': [{'$or': [{'Component': 'pfr'}, {'Component': 'ng-pfr'}, {'Component': 'common-flow-table'}, {'Component': 'media-mon'}]}, {'Submitted-on': {'$gte': datetime.datetime(2016, 2, 21, 0, 0)}}, {'Submitted-on': {'$lte': datetime.datetime(2016, 2, 28, 0, 0)}}]} " 这是一个存储在字符串中的 MongoDB 查询。如何在 Python 中将其转换为 Dict 或 JSON 格式

【问题讨论】:

    标签: json python-3.x datetime dictionary serialization


    【解决方案1】:

    你的格式不是标准的,所以你需要一个 hack 来获得它。

    import json
    s = " query : {'names' :['abc','xyz'],'location':'India'}"
    key, value = s.strip().split(':', 1)
    r = value.replace("'", '"')
    data = {
        key: json.loads(r)
    }
    

    根据您的评论:datetime 会出现问题。然后我向您介绍 hack 的技巧:eval 函数。

    import datetime
    import json
    s = " query : {'names' :['abc','xyz'],'location':'India'}"
    key, value = s.strip().split(':', 1)
    # we can leave out the replacing, single quotes is fine for eval
    data = {
        key: eval(value)
    }
    

    NB eval - 尤其是未经处理的输入 - 非常不安全。

    注意:hacks 会被破坏,例如在第一种情况下,因为值或键包含引号字符。

    【讨论】:

    • 它在key:json.loads(r) 行抛出如下错误No JSON object could be decoded。我尝试使用 simple json 来获得详细的错误通知,但不幸的是该模块不可用,我无权添加模块
    • 我发现它是导致问题的日期时间对象
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 2013-05-25
    • 2021-11-09
    • 2015-10-27
    相关资源
    最近更新 更多