我正在尝试使用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)部分传递到有效负载字符串中。有没有人对此有某种解决方案?
答案 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)