Python使用\创建一个字符串并在json请求中发送它

时间:2016-05-30 12:22:37

标签: python json string

我正在尝试使用Python自动化对API的一些查询。问题是需要以特殊方式创建请求,而我无法使其工作。这是我在创建时遇到问题的字符串的一部分。

payload = "{\n \"filter\": {\n   \"name\":[\"name1\", \"name2\"]\n }"   

其中name1和name2是可变的并且是从列表创建的。我尝试这样做的方法只是首先创建一个函数来创建

[\"name1\", \"name2\"]

这是功能

def create_string(list_of_names):
#Creates the string of line items we want data from
start = '[\\"%s\\"' % list_of_names[0]    
for i in list_of_names[1 : ]:
    start += ', \\"%s\\"' %(i)

start += "]"

return start

list_of_names = ['name1', 'name2']

然后只使用%s部分将其添加到字符串中。

payload = "{\n \"filter\": {\n   \"name\":%s\n }" % create_string(list_of_names)

这不起作用,我认为这与在Python中如何使用\有关。

如果我打印它,create_string函数会创建不同的输出。

a = create_string(list_of_names)
print(a)

使用%s

创建我需要传递的字符串
[\"name1\", \"name2\", \"name3\"]

只是输出

'[\\"name1\\", \\"name2\\", \\"name3\\"]'

那么我的问题是如何将print(a)部分传递到有效负载字符串中。有没有人对此有某种解决方案?

1 个答案:

答案 0 :(得分:3)

不是手动创建有效负载,而是首先创建一个python字典并使用json - 模块将其转换为字符串:

payload = {"filter": {"name": list_of_names]}}
payload = json.dumps(payload)

或使用更复杂的词典:

payload = {
    "filter": {
        "date": "pastThirtyDays",
        "lineitem": {
            "buyType": "RTB",
            "name": list_of_names,
        }
    },
    "metrics": ["cost"],
    "dimensions": ["date", "lineItem"],
}
payload = json.dumps(payload)