2016-05-30 112 views
0

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

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\\"]' 

所以我的问题是,那么如何通过打印(一)部分传递字符串到有效载荷字符串中。有没有人有这样的解决方案?

+0

你有一个不使用json模块的好理由:'import json; str = json.dumps({'filter':{'name':list_of_names}})' –

回答

3

而是手工创建的有效载荷,首先创建一个Python字典,并使用json -module将其转换为字符串:

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) 
+0

如果将字典移动到变量中,您的答案可能会更好一些。初学者可能不知道你正在创建一个实际的Python字典。 –

+0

@BryanOakley:你可能是对的。 – Daniel

+0

这是如何工作的,那么json.dumps为我建立查询呢?原来的Payload比这个更复杂一点,而且我不知道应该如何添加它。 {\ n \“filter \”:{\ n \“date \”:\“pastThirtyDays \”,\ n \ n \“lineitem \”:{\ n \“buyType \”:\“RTB \ “,\ n \”name \“:[\”name2 \“,\”name1 \“] \ n} \ n \ n \ n},\ n \”metrics \“:[\ n \”cost \“ \ n \ n \“dimensions \”:[\“date \”,\“lineItem \”] \ n \ n}“ – Siesta

相关问题