• 用Python上傳api資料


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 2401_85254448 2024-07-01 11:24 采纳率: 66.7% 浏览 4 首页/ 编程语言 / 已结题 用Python上傳api資料 pythonrestful api類型是restapi import requestsimport json 讀取JSON文件 with open('en.json', 'r', encoding='utf-8') as f: data = json.load(f) 設置API URL url = 'https://cmcrc.dyndns.org/api/plants' 使用POST方法上傳JSON數據到API response = requests.post(url, json=data) 打印服務器返回的響應文本 print(response.text) {"data":null,"error":{"status":400,"name":"ValidationError","message":"this must be a object type, but the final value was: null (cast from the value [\n {\n \"Title\": \"\\\"China Aloes\\\"\",\n \"Latin\": \"\\\"Aloe vera \\\"\",\n \"Origin\": \"\\\"Liliaceae\\\"\",\n \"PartUsed\": \"\\\"Juice\\\"\",\n \"Properties\": \"\\\"Taste bitter, cold in nature.\\\"\",\n \"Functions\": \"\\\"Clears the liver. Used for constipation induced by accumulation of heat.\\\"\",\n \"Pid\": \"\\\"10001\\\"\",\n \"locale\": \"\\\"en\\\"\"\n },\n {\n \"Title\": \"\\\"False Sumac\\\"\",\n \"Latin\": \"\\\"Brucea javanica\\\"\",\n \"Origin\": \"\\\"Simaroubaceae\\\"\",\n \"PartUsed\": \"\\\"Dried mature fruits\\\"\",\n \"Properties\": \"\\\"Taste bitter, cold in nature, mild-toxic.\\\"\",\n \"Functions\": \"\\\"Clearing heat-toxin. Used for hemafecia due to pyretic toxicity.\\\"\",\n \"Pid\": \"\\\"10002\\\"\",\n \"locale\": \"\\\"en\\\"\"\n }\n]).","details":{"errors":[{"path":[],"message":"this must be a object type, but the final value was: null (cast from the value [\n {\n \"Title\": \"\\\"China Aloes\\\"\",\n \"Latin\": \"\\\"Aloe vera \\\"\",\n \"Origin\": \"\\\"Liliaceae\\\"\",\n \"PartUsed\": \"\\\"Juice\\\"\",\n \"Properties\": \"\\\"Taste bitter, cold in nature.\\\"\",\n \"Functions\": \"\\\"Clears the liver. Used for constipation induced by accumulation of heat.\\\"\",\n \"Pid\": \"\\\"10001\\\"\",\n \"locale\": \"\\\"en\\\"\"\n },\n {\n \"Title\": \"\\\"False Sumac\\\"\",\n \"Latin\": \"\\\"Brucea javanica\\\"\",\n \"Origin\": \"\\\"Simaroubaceae\\\"\",\n \"PartUsed\": \"\\\"Dried mature fruits\\\"\",\n \"Properties\": \"\\\"Taste bitter, cold in nature, mild-toxic.\\\"\",\n \"Functions\": \"\\\"Clearing heat-toxin. Used for hemafecia due to pyretic toxicity.\\\"\",\n \"Pid\": \"\\\"10002\\\"\",\n \"locale\": \"\\\"en\\\"\"\n }\n]).","name":"ValidationError"}]}}}這是報錯 展开全部 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    3条回答 默认 最新

    • 阿里嘎多学长 2024-07-01 11:24
      关注

      以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


      看起来你在使用Python的requests库上传数据到RESTful API时遇到了问题。错误信息表明服务器期望接收的数据类型是一个对象,但实际收到的是一个null值,这可能是因为在发送请求时,json参数的使用方式不正确。

      根据你提供的错误信息,问题似乎在于你尝试上传的数据是一个JSON数组,但API期望的可能是单个对象。不过,错误信息中的描述与实际数据格式似乎存在矛盾,因为从你提供的JSON示例来看,它看起来像是一个数组,而不是null

      这里有几个可能的解决方案:

      1. 检查API文档:首先,确保你理解了API的期望数据格式。查看API文档,确认它是否期望一个对象或数组。

      2. 调整数据格式:如果API确实期望一个对象,你可能需要调整你的JSON数据结构,使其成为一个对象而不是数组。例如:

        {
          "data": [
            {
              "Title": "China Aloes",
              "Latin": "Aloe vera ",
              "Origin": "Liliaceae",
              "PartUsed": "Juice",
              "Properties": "Taste bitter, cold in nature.",
              "Functions": "Clears the liver. Used for constipation induced by accumulation of heat.",
              "Pid": "10001",
              "locale": "en"
            },
            ...
          ]
        }
        
      3. 修改请求方式:如果你确定API期望的是一个数组,那么可能需要检查API的其他参数或请求头是否正确设置。有时候,API可能需要特定的请求头(如Content-Type)来正确解析数据。

      4. 调试请求:使用工具如Postman或curl来手动发送请求,以验证API期望的数据格式和你的请求是否匹配。

      5. 错误处理:在Python代码中添加错误处理逻辑,以便在发生错误时能够更清楚地了解问题所在。

      这里是一个修改后的示例代码,假设API期望的是一个包含数据数组的对象:

      import requests
      import json
      
      # 讀取JSON文件
      with open('en.json', 'r', encoding='utf-8') as f:
          data = json.load(f)
      
      # 将数据包装在一个对象中
      payload = {"data": data}
      
      # 設置API URL
      url = 'https://cmcrc.dyndns.org/api/plants'
      
      # 使用POST方法上傳JSON數據到API
      response = requests.post(url, json=payload)
      
      # 打印服務器返回的響應文本
      print(response.text)
      

      请注意,这只是一个示例,你可能需要根据API的具体要求调整数据结构。如果需要进一步的帮助,请提供更多的API文档信息或错误详情,我会尽力提供更具体的帮助。

      目前没有特定的参考链接,因为解决方案主要基于对错误信息的分析和一般的API交互知识。如果你需要查找更多关于requests库或JSON数据处理的信息,你可以查看以下资源:

      展开全部

      本回答被题主选为最佳回答 , 对您是否有帮助呢?
      评论 编辑记录
    查看更多回答(2条)
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    【前端】get fncName 与 function fncName 声明函数的区别
    计算机网络_网络层概述
    ERROR: ld.so: object ‘/$LIB/libonion.so‘ from /etc/ld.so.preload
    C ++ 1
    深入浅出富文本编辑器
    Kafka 认证三:Kerberos 认证中心部署
    【开发篇】二十三、SpringBoot Admin端点指标控制以及自定义端点
    VScode
    九齐单片机项目使用避坑
    工作中遇到的问题与解决办法(三)
  • 原文地址:https://ask.csdn.net/questions/8125752