Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 在Python中将带有Datetime字段的MongoDB查询字符串转换为Dict_Json_Python 3.x_Datetime_Dictionary_Serialization - Fatal编程技术网

Json 在Python中将带有Datetime字段的MongoDB查询字符串转换为Dict

Json 在Python中将带有Datetime字段的MongoDB查询字符串转换为Dict,json,python-3.x,datetime,dictionary,serialization,Json,Python 3.x,Datetime,Dictionary,Serialization,我有一个字符串,如下所示, s=“查询:{'$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)

我有一个字符串,如下所示,
s=“查询:{'$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格式

您的格式不是标准格式,因此您需要一个黑客程序才能获得它

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 of 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)
}
注意
eval
-尤其是在未初始化的输入上-非常不安全


注意:在第一种情况下,黑客行为将被破坏,例如,因为值或键包含引号字符

它抛出一个错误,如下所示:在第
key:JSON.loads(r)
行,无法解码任何JSON对象。我尝试使用简单的json来获得详细的错误通知,但不幸的是,该模块不可用,并且我没有添加模块的权限。我发现是datetime对象导致了问题