Python:如何防止python字典在我的json周围加上引号?

时间:2016-06-08 06:36:47

标签: python json http python-requests

我正在使用请求在承包商的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请求情况?

1 个答案:

答案 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