【问题标题】:How to iterate json list with dict in python如何在python中用dict迭代json列表
【发布时间】:2022-01-09 13:22:58
【问题描述】:

我正在通过 API 调用数据并希望将该数据写入我的 Django 模型。 API 为我提供了具有以下结构的 JSON:

"results": [
        {
            "key1": "value",
            "key2": "value"
         },
         {
            "key1": "value",
            "key2": "value",
         },
         {
            "key1": "value",
            "key2": "value",
         },
         ....

我的代码如下所示:

    def get_data():
        try:
            response = requests.get(settings.HOST+settings.PATH, verify=False)
            for data in response['results']:
                print(data)
                mydata = MyModel.add(**data)
            return results

我收到此错误:

Connected to pydev debugger (build 212.5284.44)
{'key1': 'value', 'key2': 'value'}
list indices must be integers or slices, not str

Process finished with exit code 0


Traceback (most recent call last):
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 846, in exec_module
  File "<frozen importlib._bootstrap_external>", line 983, in get_code
  File "<frozen importlib._bootstrap_external>", line 913, in source_to_code
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "/Users/user01/Repository/api-test/myapi/myapp/management/commands/getapidata.py", line 27
    get_data()
IndentationError: unexpected unindent
python-BaseException

我做错了什么?

PyCharm 中的变量截图

【问题讨论】:

  • 请提供完整的回溯。
  • 请提供完整的堆栈跟踪,以便我们知道错误指的是什么。
  • 包含这个严重裁剪的图像有什么意义?
  • @WillemVanOnsem 我添加了完整的回溯
  • response = requests.get(settings.HOST+settings.PATH, verify=False),不是response: requests.get(settings.HOST+settings.PATH, verify=False)

标签: python json django list loops


【解决方案1】:

您的问题是您没有从响应中获取 json。

就像@Jisson 所说的那样。

您需要致电.json()

    def get_data():
        try:
            response = requests.get(settings.HOST+settings.PATH, verify=False)
            json_response = response.json() # new
            for data in json_response['results']: # modified
                print(data)
                mydata = MyModel.add(**data)
            return results

【讨论】:

  • 我已经试过了,但是得到了这个:''''list' object has no attribute 'json''''
  • 这个响应怎么是一个列表?
  • results 是一个带有字典的列表
【解决方案2】:

我的代码大部分都有效。 json 中的另一个 dict 导致了这个问题。在处理 JSON 的模型中,我没有添加另一个循环,这就是问题所在。我在这部分发表评论,一切正常。

感谢大家的宝贵时间!

【讨论】:

    猜你喜欢
    • 2013-11-03
    • 2018-01-14
    • 2013-12-10
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 2020-09-07
    • 2020-07-19
    • 1970-01-01
    相关资源
    最近更新 更多