我正在使用请求在承包商的API上创建一个帖子请求。我有一个JSON变量inputJSON
,它经历了这样的格式化:
def dolayoutCalc(inputJSON):
inputJSON = ast.literal_eval(inputJSON)
inputJSON = json.dumps(inputJSON)
url='http://xxyy.com/API'
payload = {'Project': inputJSON, 'x':y, 'z':f}
headers = {'content-type': 'application/json', 'Accept': 'text/plain'}
r = requests.post(url, data=json.dumps(payload), headers=headers)
我定义payload={'Project':inputJSON, 'x':y, 'z':f}
时出现问题
最终发生的事情是Python在inputJSON结构周围放置了一对引号。我遇到的API无法解决这个问题。它需要Project值是完全相同的inputJSON值,只是没有引号。
如何防止python在inputJSON
对象周围放置引号?或者有没有办法使用请求库来处理这种POST请求情况?
答案 0 :(得分:0)
inputJSON获取引号,因为它是一个字符串。当你在某个字符串上调用json.dumps()时会出现一个字符串,然后当它被转换为JSON时,它会在它周围得到引号。 e.g:
>>> import json
>>> json.dumps('this is a string')
>>> '"this is a string"'
我和AKS一起应该可以删除这一行:
inputJSON = json.dumps(inputJSON)
根据你的描述,inputJSON听起来像是一个Python文字(例如{' blah':True}而不是{" blah":true}。所以你已经使用了ast模块将其转换为Python值,然后在最终的json.dumps()中,它应该与其他所有内容一起转换为JSON。
示例:
>>> import ast
>>> import json
>>> input = "{'a_var': True}" # A string that looks like a Python literal
>>> input = ast.literal_eval(input) # Convert to a Python dict
>>> print input
>>> {'a_var': True}
>>> payload = {'Project': input} # Add to payload as a dict
>>> print json.dumps(payload)
>>> {"Project": {"a_var": true}} # In the payload as JSON without quotes