【问题标题】:How can I properly generate URL parameters from nested JSON parameters in Python requests如何从 Python 请求中的嵌套 JSON 参数正确生成 URL 参数
【发布时间】:2016-10-27 13:11:26
【问题描述】:

我正在尝试使用请求将多个条件传递给 Connectwise REST api。我正在尝试生成如下所示的 URL

/company/configurations/?pageSize=1000&conditions=id=83500 and type/name="Printer" and name="TEST API PRINTER"

但我似乎只能生成这个:

/company/configurations/?pageSize=1000&conditions=id&conditions=type/name&conditions=name

我的有效载荷如下所示:

parameters = {}
    parameters['conditions'] = {}
    parameters['pageSize'] = 1000
    if db_rid:
        parameters['conditions']['id'] = 83500
    if type_name:
        parameters['conditions']['type/name'] = "Printer"
    if name:
        parameters['conditions']['name'] = "TEST API PRINTER"
requests.get(APIurl, params=parameters)

我哪里出错了?

【问题讨论】:

  • 那是因为原始url中“conditions”的值是一长串id=83500 and type/name="Printer" and name="TEST API PRINTER"。这不是某种神奇的嵌套参数。您只需将conditions 参数设置为等于该字符串即可。
  • 使用字符串parameters['conditions'] = 'id=83500 and ...'
  • 我认为可能是这种情况,我选择构建一个函数来为我构建字符串,我将在下面的答案中给出。感谢您的澄清!

标签: python rest python-3.x python-requests


【解决方案1】:

如果您愿意使用urllib.urlencode,可以尝试一下 -

conditions = {"id": 83500, "type/name": "Printer", "name": "TEST API PRINTER"} 
query = {"pageSize": 1000, "conditions": conditions}
params = urllib.urlencode(query)
final_url = str(APIurl) + "&" + str(params)
response = requests.get(url=final_url)

【讨论】:

    【解决方案2】:

    我创建了一个函数来为此生成条件字符串。

        def _add_condition(self, string, add_string, add_value):
        if string == '':
            if type(add_value) is not str:
                result = '{}={}'.format(add_string, add_value)
            else:
                result = '{}="{}"'.format(add_string, add_value)
        else:
            if type(add_value) is not str:
                result = '{} and {}={}'.format(string, add_string, add_value)
            else:
                result = '{} and {}="{}"'.format(string, add_string, add_value)
        print(result)
        return result
    

    【讨论】:

      猜你喜欢
      • 2012-10-22
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      • 2023-02-03
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多