【问题标题】:REST APIs: How to POST several entries from a (JSON) file in a python loop?REST API:如何在 python 循环中从(JSON)文件中发布多个条目?
【发布时间】:2021-07-22 02:56:51
【问题描述】:

我是 python 和 REST 世界的新手。

我的 Python 脚本

import json
import requests

with open(r"create-multiple-Users.json", "r") as payload:
    data = json.load(payload)
    json_data = json.dumps(data, indent=2)
    headers = {'content-type': 'application/json; charset=utf-8'}

    for i in range(len(data)):
        r = requests.post('http://localhost:3000/users',
                          data=json_data, headers=headers)

模拟 API 服务器https://github.com/typicode/json-server .

输入文件:“info.json”,端点:/users,最初只有一个用户。

{
  "users": [
    {
      "id": 1,
      "name": "John",
      "job": "Wong"
    }
   ]
}

问题:

  • 从只有一个用户的文件中发布完美的作品。新用户按预期作为对象附加到 info.json。

  • 但是在尝试发布时假设下面的文件“create-multiple-Users.json”中有 3 个用户,然后用户将作为对象列表附加到“info.json”3 次(即对象/迭代次数)

    [ { “身份证”:10, “姓名”:“珍妮特”, “工作”:“织布工” }, { “身份证”:12, “名称”:“权”, “工作”:“Wingtsel” }, { “身份证”:13, “名称”:“夏娃”, “工作”:“霍尔特” } ]

我希望将用户一个一个地附加为单独的对象。

也许我过于简化了循环? 非常感谢任何帮助。

PS:抱歉,我无法格式化多用户文件;(

【问题讨论】:

    标签: python json api rest


    【解决方案1】:

    感谢"enriqueojedalara"

    ,我通过使用提示找到了解决方案
    import json
    import requests
    
    with open(r"create-multiple-Users.json", "r") as payload:
        data = json.load(payload) #<class 'list'>
        headers = {'content-type': 'application/json; charset=utf-8'}
        print("Total number of objects: ", len(data))
        for i in range(len(data)):
            data_new = json.dumps(data[i])
            r = requests.post('http://localhost:3000/users', data=data_new, headers=headers)
            print("Item#", i, "added", " -> ", data_new)
    

    【讨论】:

      【解决方案2】:

      在你的 for 迭代中做一个简单的改变会有所帮助:

      import json
      import requests
      
      with open(r"create-multiple-Users.json", "r") as payload:
          data = json.load(payload)
          json_data = json.dumps(data, indent=2)
          headers = {'content-type': 'application/json; charset=utf-8'}
      
          for row in data: # Change this to iterate the json list
              r = requests.post('http://localhost:3000/users',
                                data=row, headers=headers) # Send row that is a single object
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-19
        • 2021-02-05
        • 2021-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-17
        • 2021-05-29
        相关资源
        最近更新 更多