【问题标题】:How to insert JSON data into Payload for API deployment?如何将 JSON 数据插入 Payload 以进行 API 部署?
【发布时间】:2019-01-10 01:53:48
【问题描述】:

需要在 {} 中插入 JSON 文件内容以用于 Payload。无法成功执行此操作。有什么想法吗?

尝试将 JSON 文件内容写入字符串,但失败。尝试将 JSON 文件插入有效负载 = {},失败。

import requests, meraki, json, os, sys

with open('networkid.txt') as file:
     array = file.readlines()
     for line in array:
         line = line.rstrip("\n")
         url = 'https://api.meraki.com/api/v0/networks/%s/alertSettings' %line
         payload = {}
         headers = { 'X-Cisco-Meraki-API-Key': 'API Key','Content-Type': 'application/json'}
         response = requests.request('PUT', url, headers = headers, data = payload, allow_redirects=True, timeout = 10)
         print(response.text)

我正在编写一个脚本来通过 API 将参数部署到 Meraki 网络。我在自己的文件中正确格式化了 JSON 信息,我需要将 JSON 数据插入脚本中 Payload 的位置。关于如何做到这一点的任何想法?我已经有一个 for 循环,它是运行 .txt 文件中包含的网络 ID 列表所必需的。有什么想法吗?

【问题讨论】:

  • 你说你试图写/插入......放我看不到你实际这样做的任何地方。你设置了payload = {},但什么也不做。我还假设您的缩进已关闭,因为我认为您不想在 for 循环的每次迭代后使用请求。
  • 这段代码会因为缩进产生语法错误。请修复它。当您将代码粘贴到问题或答案中时,您可以立即选择粘贴的代码,然后键入 Ctrl+K 或单击界面中的{} 按钮,以便为您正确格式化。
  • 刚刚更正了格式。代码原样适用于我们使用它的其他用途,但我不是 100% 如何插入 JSON 文件。这就是我寻求帮助的原因。
  • 你试过json.load来读取你文件中的json数据吗?
  • 我现在实际上正在尝试。我不是 python 专家,所以请原谅我。我正试图找出实际放置的位置。我需要 For 循环和 with 语句保持原样,因为它们执行完全不同的功能,这是整个工作所必需的。目前我不确定将您的建议放在此代码中的哪个位置。

标签: python json api


【解决方案1】:

requests.request 中的data 参数采用(optional) Dictionary, list of tuples, bytes, or file-like object to send in the body of the :class:Request

您可以使用 json.load 将格式正确的 json 文件转换为 python 字典:

with open('json_information.json') as f:
    payload = json.load(f)

那么你可以直接将data=payload传入到requests.request的调用中:

with open('networkid.txt') as file:
    array = file.readlines()
    for line in array:
        line = line.rstrip("\n")
        url = 'https://api.meraki.com/api/v0/networks/%s/alertSettings' % line
        headers = { 'X-Cisco-Meraki-API-Key': 'API Key','Content-Type': 'application/json'}
        response = requests.request('PUT',
                                    url,
                                    headers=headers,
                                    data=payload,
                                    timeout = 10)  # allow_redirects is True by default
        print(response.text)

【讨论】:

    猜你喜欢
    • 2021-04-03
    • 2015-04-30
    • 1970-01-01
    • 2016-09-10
    • 2020-03-19
    • 2019-10-25
    • 1970-01-01
    • 2013-06-03
    • 2017-10-24
    相关资源
    最近更新 更多