使用 Python 创建字典并使用 POST 请求发送它的问题
Issue with creating a dictionary with Python and send it with a POST request
最近 5 个小时,我一直在努力寻找如何在 Python 中以编程方式创建一个字典,其中包含我从列表中获取的特定值。
这听起来很容易(而且必须如此),但我完全迷失在双引号、字符串值和转义字符的错误中。任何帮助将不胜感激。至少要明白我到底做错了什么:
我会尽量详细一点。我想要做的是以编程方式创建这个:
checkNode = {'statements':[
{"statement":"MATCH (n:RealNode { id: "1" }) SET n.telecomType = 'P', n.buildingType= 'c' RETURN n"},
{"statement":"MATCH (n:RealNode { id: "2" }) SET n.telecomType = 'P', n.buildingType= 'w' RETURN n"}, {...}, {...}
]}
上面是 Neo4J 查询,我想通过发送 POST 请求来执行,如下所示:
mkr = requests.post(url, data=json.dumps(checkNode), headers=headers)
这是我遵循的程序:
首先我将 x 转换成一个字符串,其中 x 是:
x = {"statement":"MATCH (n:RealNode { id: "1" }) SET n.telecomType = 'P', n.buildingType= 'c' RETURN n"}
stringX = str(x)
然后我将这个字符串追加到列表中 (mylist())。最后这个列表里面有一些字符串。
然后我使用"join"方法连接列表中的所有值并用逗号分隔它们:
allStatement = ','.join(mylist)
然后我创建变量 "checkNode",这是我将发送到我的 POST 请求的变量:
checkNode = {'statements':[allStatement]}
在第 4 步和第 6 步之间,我尝试了一系列操作,例如替换引号和将变量 "checkNode" 转换为字符串。
我发送了请求:
mkr = requests.post(url, data=json.dumps(checkNode), headers=headers)
print(mkr.text)
请求从未发送。
我打印了 checkNode 变量,它看起来像这样:
{'statements': ["{'statement': MATCH (n:RealNode { id: 'P3301041101' }) SET n.telecomType = 'P', n.buildingType= 'sealed' RETURN n},{'statement': CREATE (dsld:DslSldBconf {nodeType:'P3301041101', id: 'DSL-SLD48-BCONF-ALU', temaxia: '1'})}..."]}
I think one of the problems here is the double quotes after the [
我花了几个小时试验不同的参数,但我无法让它工作。我在这里做错了什么?
非常感谢!
您不应该乱用手动字符串处理; json
模块为您完成所有这些工作。你想要的更像是:
x = {"statement":"MATCH (n:RealNode { id: "1" }) SET n.telecomType = 'P', n.buildingType= 'c' RETURN n"}
statement_list = [x]
# add any more statements to statement_list, probably using append()
checkNode = {'statements': statement_list}
mkr = requests.post(url, data=json.dumps(checkNode), headers=headers)
print(mkr.text)
此外,对于您通过网络发送的内容,请注意什么是 str
什么是 bytes
。
最近 5 个小时,我一直在努力寻找如何在 Python 中以编程方式创建一个字典,其中包含我从列表中获取的特定值。 这听起来很容易(而且必须如此),但我完全迷失在双引号、字符串值和转义字符的错误中。任何帮助将不胜感激。至少要明白我到底做错了什么:
我会尽量详细一点。我想要做的是以编程方式创建这个:
checkNode = {'statements':[
{"statement":"MATCH (n:RealNode { id: "1" }) SET n.telecomType = 'P', n.buildingType= 'c' RETURN n"},
{"statement":"MATCH (n:RealNode { id: "2" }) SET n.telecomType = 'P', n.buildingType= 'w' RETURN n"}, {...}, {...}
]}
上面是 Neo4J 查询,我想通过发送 POST 请求来执行,如下所示:
mkr = requests.post(url, data=json.dumps(checkNode), headers=headers)
这是我遵循的程序:
首先我将 x 转换成一个字符串,其中 x 是:
x = {"statement":"MATCH (n:RealNode { id: "1" }) SET n.telecomType = 'P', n.buildingType= 'c' RETURN n"} stringX = str(x)
然后我将这个字符串追加到列表中 (mylist())。最后这个列表里面有一些字符串。
然后我使用"join"方法连接列表中的所有值并用逗号分隔它们:
allStatement = ','.join(mylist)
然后我创建变量 "checkNode",这是我将发送到我的 POST 请求的变量:
checkNode = {'statements':[allStatement]}
在第 4 步和第 6 步之间,我尝试了一系列操作,例如替换引号和将变量 "checkNode" 转换为字符串。
我发送了请求:
mkr = requests.post(url, data=json.dumps(checkNode), headers=headers) print(mkr.text)
请求从未发送。 我打印了 checkNode 变量,它看起来像这样:
{'statements': ["{'statement': MATCH (n:RealNode { id: 'P3301041101' }) SET n.telecomType = 'P', n.buildingType= 'sealed' RETURN n},{'statement': CREATE (dsld:DslSldBconf {nodeType:'P3301041101', id: 'DSL-SLD48-BCONF-ALU', temaxia: '1'})}..."]}
I think one of the problems here is the double quotes after the [
我花了几个小时试验不同的参数,但我无法让它工作。我在这里做错了什么? 非常感谢!
您不应该乱用手动字符串处理; json
模块为您完成所有这些工作。你想要的更像是:
x = {"statement":"MATCH (n:RealNode { id: "1" }) SET n.telecomType = 'P', n.buildingType= 'c' RETURN n"}
statement_list = [x]
# add any more statements to statement_list, probably using append()
checkNode = {'statements': statement_list}
mkr = requests.post(url, data=json.dumps(checkNode), headers=headers)
print(mkr.text)
此外,对于您通过网络发送的内容,请注意什么是 str
什么是 bytes
。