【问题标题】:Issue with creating a dictionary with Python and send it with a POST request使用 Python 创建字典并使用 POST 请求发送时出现问题
【发布时间】:2015-02-19 17:18:58
【问题描述】:

在这 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 步之间,我尝试了一系列操作,例如替换引号并将变量“checkNode”转换为字符串。

  6. 我发送了请求:

    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 [

我花了几个小时尝试不同的参数,但我无法让它发挥作用。我在这里做错了什么? 非常感谢!

【问题讨论】:

    标签: python quotes


    【解决方案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)
    

    另外,对于您通过网络发送的内容,请注意strbytes 是什么。

    【讨论】:

    • 非常感谢您的回答。这似乎可行,但我仍然对语句中的双引号有问题。例如。 n:RealNode { id: "1" })。我收到无效的语法错误。如果我将其更改为单引号,它可以工作,但由于 id 是这样创建的:{id:"+idVariable+" ...我无法真正更改它。
    • 这里唯一要做的就是逃避它们。 json 应该自动为数据中的引号执行此操作;在脚本中使用 \" 作为引号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 2022-08-03
    相关资源
    最近更新 更多