**后面的类型对象参数必须是映射,而不是str

2024-07-03 08:22:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从站点获取json并将其更改为python对象。 我编写了此代码,但它显示了以下错误:

    ----- line 25, in <module>
    meme_list.append(meme(**u))
TypeError: type object argument after ** must be a mapping, not str

这是我的密码:

import requests
import json

url = 'https://api.imgflip.com/get_memes'
headers = {'Accept': 'application/json'}
response = requests.get(url, headers=headers)
with open('meme_imgflip.json', 'wb') as outf:
    outf.write(response.content)

class meme:
    def __init__(self, name, url, id):
        self.name = name
        self.url = url
        self.id = id
    @staticmethod
    def from_json(meme_string):
        return meme(**json_dict)
    def __repr__(self):
        return f'<meme {self.id}>'

meme_list = []
with open('meme_imgflip.json', 'r') as json_file:
    meme_data = json.loads(json_file.read())
    for u in meme_data:
        meme_list.append(meme(**u))
print (meme_list)

Tags: nameinimportselfidjsonurlget
2条回答

您正在调用的API返回一个字典,而不是列表。模因列表在meme_data['data']['memes']中。因此,循环应该是:

for u in meme_data['data']['memes']:
    meme_list.append(meme(**u))

meme_data包含一个dict,因此u分配给该dict,这些键是字符串。现在还不清楚你想要什么

相关问题 更多 >