【发布时间】:2020-12-08 15:11:14
【问题描述】:
我正在开发一个 Discord Bot,它解析 API、格式化并返回数据。 我需要解析嵌套的键,特别是“current”、“today”、“day30”、“day90”和“day180”键,并且找不到直接的方法来解析。 这是 JSON 数据:
{
"item": {
"icon": "url_removed_for_obscurity",
"icon_large": "url_removed_for_obscurity",
"id": 859,
"type": "Default",
"typeIcon": "url_removed_for_obscurity",
"name": "Example Item",
"description": "Example Item Description",
"current": {
"trend": "neutral",
"price": "1,210"
},
"today": {
"trend": "negative",
"price": "- 16"
},
"members": "true",
"day30": {
"trend": "negative",
"change": "-4.0%"
},
"day90": {
"trend": "negative",
"change": "-8.0%"
},
"day180": {
"trend": "negative",
"change": "-3.0%"
}
}
}
这按预期工作:
item_desc = '';
current_vals = ''; todays_vals = ''; day30_vals = ''; day90_vals = ''; day180_vals = ''
current_trend = ''; todays_trend = ''; day30_trend = ''; day90_trend = ''; day180_trend = '';
get_item_data = requests.get(item_endpoint).json()
for key, val in get_item_data.items():
if(query_id == str(val['id'])):
#print('[Debug] Found Item Through API...')
if('description' in val):
item_desc = str(val['description'])
await context.send(item_desc)
if('current' in val):
current_vals = str(val['current'])
await context.send(current_vals)
if('today' in val):
todays_vals = str(val['today'])
await context.send(todays_vals)
if('day30' in val):
day30_vals = str(val['day30'])
await context.send(day30_vals)
if('day90' in val):
day90_vals = str(val['day90'])
await context.send(day90_vals)
if('day180' in val):
day180_vals = str(val['day180'])
await context.send(day180_vals)
break
然后输出:
Example Item Description
{'trend': 'neutral', 'price': '1,210'}
{'trend': 'negative', 'price': '- 16'}
{'trend': 'negative', 'change': '-4.0%'}
{'trend': 'negative', 'change': '-8.0%'}
{'trend': 'negative', 'change': '-3.0%'}
我知道我需要这样做:
current_trend = ''; todays_trend = ''; day30_trend = ''; day90_trend = ''; day180_trend = '';
if('current' in val):
current_vals = str(val['current'])
parse_current_vals = json.loads(current_vals)
if('trend' in parse_current_vals.items()):
current_trend = str(parse_current_vals['trend'])
await context.send(current_trend)
etc
我希望它简单地返回
negative
neutral
或
positive
它目前什么都不返回,因为我显然没有正确解析。 我已经尝试了上述许多不同的变体,但均无济于事。最后几个小时的谷歌搜索和试验/错误让我在这里寻求建议。欢迎和赞赏任何和所有的输入。
【问题讨论】:
-
您的预期输出是什么?以及它与您得到的输出有何不同?
-
@deadshot 已相应编辑。
-
还不清楚
-
我希望它简单地输出“负面”“中性”或“正面”。它目前没有输出任何内容,因为我知道我没有正确处理它。
标签: python json api nested discord