使用Python创建字典并使用POST请求发送它的问题

时间:2015-02-19 17:18:59

标签: python quotes

我在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)

这是我遵循的程序:

  1. 首先,我将x转换为字符串,其中x为:

    x = {"statement":"MATCH (n:RealNode { id: "1" }) SET n.telecomType = 'P', n.buildingType= 'c' RETURN n"}
    
    stringX = str(x)
    
  2. 然后我将此字符串附加到列表(mylist())中。最后,列表中包含许多字符串。

  3. 然后我使用“join”方法连接列表中的所有值,并用逗号分隔它们:

    allStatement = ','.join(mylist)
    
  4. 然后我创建变量“checkNode”,这是我将发送给我的POST请求的那个:

    checkNode = {'statements':[allStatement]}
    
  5. 在第4步和第6步之间,我尝试了一系列的事情,例如替换引号并将变量“convertNode”转换为字符串。

  6. 我发了请求:

    mkr = requests.post(url, data=json.dumps(checkNode), headers=headers)
    print(mkr.text)
    
  7. 请求永远不会被发送。 我打印了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 [
    

    我花了几个小时试验不同的参数,但我不能让它工作。我在这做错了什么? 非常感谢!

1 个答案:

答案 0 :(得分:1)

你不应该搞乱手动字符串处理; 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的内容。