python-3.x - 空值到空值 JSON 在嵌入中发送
问题描述
我正在发出一个命令,它会随机吐出要制作的饮料。问题是,一些饮料比其他饮料有更多的成分和测量值,这导致一些键返回为 null 或 None。我fix_data
过去常常将 Nones 变成空白,但这会在我的嵌入中造成巨大的差距。有没有更简单的方法来显示嵌入中的数据或更简单的方法来清除 JSON 中的 None 值?
def fix_data(data):
if type(data) is list:
for i, e in enumerate(data):
if e is None:
data[i] = ''
else:
fix_data(e)
if message.content.lower().startswith("!drink"):
url = 'https://thecocktaildb.com/api/json/v1/1/random.php'
res = requests.get(url)
data = res.json()
fix_data(data)
drinkname = data['drinks'][0]['strDrink']
drinkimage = data['drinks'][0]['strDrinkThumb']
instructions = data['drinks'][0]['strInstructions']
ingredient1 = data['drinks'][0]['strIngredient1']
ingredient2 = data['drinks'][0]['strIngredient2']
ingredient3 = data['drinks'][0]['strIngredient3']
ingredient4 = data['drinks'][0]['strIngredient4']
ingredient5 = data['drinks'][0]['strIngredient5']
ingredient6 = data['drinks'][0]['strIngredient6']
ingredient7 = data['drinks'][0]['strIngredient7']
ingredient8 = data['drinks'][0]['strIngredient8']
ingredient9 = data['drinks'][0]['strIngredient9']
ingredient10 = data['drinks'][0]['strIngredient10']
ingredient11 = data['drinks'][0]['strIngredient11']
ingredient12 = data['drinks'][0]['strIngredient12']
ingredient13 = data['drinks'][0]['strIngredient13']
ingredient14 = data['drinks'][0]['strIngredient14']
ingredient15 = data['drinks'][0]['strIngredient15']
measure1 = data['drinks'][0]['strMeasure1']
measure2 = data['drinks'][0]['strMeasure2']
measure3 = data['drinks'][0]['strMeasure3']
measure4 = data['drinks'][0]['strMeasure4']
measure5 = data['drinks'][0]['strMeasure5']
measure6 = data['drinks'][0]['strMeasure6']
measure7 = data['drinks'][0]['strMeasure7']
measure8 = data['drinks'][0]['strMeasure8']
measure9 = data['drinks'][0]['strMeasure9']
measure10 = data['drinks'][0]['strMeasure10']
measure11 = data['drinks'][0]['strMeasure11']
measure12 = data['drinks'][0]['strMeasure12']
measure13 = data['drinks'][0]['strMeasure13']
measure14 = data['drinks'][0]['strMeasure14']
measure15 = data['drinks'][0]['strMeasure15']
msg = '**Drink**: \n{}\n\n**Ingredients**: \n{} {}\n{} {}\n{} {}\n{} {}\n{} {}\n{} {}\n{} {}\n{} {}\n{} {}\n{} {}\n{} {}\n{} {}\n{} {}\n{} {}\n{} {}\n\n**Instructions**: \n{}'.format(drinkname,measure1, ingredient1, measure2, ingredient2, measure3, ingredient3, measure4, ingredient4, measure5, ingredient5, measure6, ingredient6, measure7, ingredient7, measure8, ingredient8, measure9, ingredient9, measure10, ingredient10, measure11, ingredient11, measure12, ingredient12, measure13,ingredient13, measure14, ingredient14 , measure15, ingredient15, instructions)
embed = discord.Embed(title="** DRINK BOT **", description=msg, color=0x9554af)
embed.set_author(name="DRINK BOT", icon_url="https://i.imgur.com/RI2iiLd.png")
embed.set_thumbnail(url='{}'.format(drinkimage))
embed.set_footer(text="DRINK BOT", icon_url="https://i.imgur.com/RI2iiLd.png")
await client.send_message(message.channel, embed=embed)
解决方案
使用 for 循环和 if 语句检查每种成分是否为无。
import requests
url = 'https://thecocktaildb.com/api/json/v1/1/random.php'
res = requests.get(url)
data = res.json()
drinks = data['drinks'][0]
ingredients_list = ""
for i in range(1, 16):
if drinks[f"strIngredient{i}"]:
measure = drinks[f"strMeasure{i}"]
ingredient = drinks[f"strIngredient{i}"]
ingredients_list+=f"{measure if measure else ''} {ingredient}\n"
drinkname = drinks['strDrink']
drinkimage = drinks['strDrinkThumb']
instructions = drinks['strInstructions']
msg = f"**Drink**:\n {drinkname}\n\n **Ingredients**:\n {ingredients_list}\n **Instructions**: \n{instructions}"
print(msg)
推荐阅读
- ios - swift-Tableview 单元格 UIButton 背景颜色
- r - 用 R (r-cran) 消除在一段时间内不变的观测值
- java - 从另一个类访问变量(Java)
- julia - 朱莉娅 | 在二维数组中推送或追加
- python - 无法使用 Flask、MySQL 更新记录
- c# - 以编程方式从 Azure 订阅中删除用户 (C#)
- sharepoint - SharePoint 2013 列表 - 列索引、列表阈值限制、REST api
- sql - Access 2010 SQL 查询选择带有临时表的内部联接
- c# - 如何在 PuppeteerSharp 中等待异步函数评估
- php - Doctrine - 在 From 中进行子选择