如何按JSON嵌套字段status过滤Warframe市场API的订单价格列表?
解决JSON嵌套字段过滤与价格排序问题
嗨,刚接触JSON解析不用慌,咱们一步步来搞定这个过滤需求~
首先,你要访问的user.status是嵌套在订单对象里的字段:每个订单(也就是你代码里的tata)本身是一个字典,里面的"user"键对应另一个子字典,这个子字典里的"status"就是咱们用来过滤的核心条件。
接下来直接修改你的代码,在收集价格前先判断订单的用户状态,只保留符合条件的订单价格就行。比如Warframe Market里咱们通常会优先选**在线(online)或在游戏中(ingame)**的订单,因为离线用户的订单没法即时交易:
import json import urllib2 # 注意:如果用Python3,urllib2已拆分到urllib.request模块,需要调整为import urllib.request def Trade(item): # 发起请求并解析JSON响应 request = urllib2.Request(f'https://api.warframe.market/v1/items/{item}/orders') response = urllib2.urlopen(request) data = json.loads(response.read()) # 提取订单列表(简化原代码的多层赋值) orders = data["payload"]["orders"] prezzi = [] # 遍历订单,过滤符合状态的订单并收集价格 for order in orders: # 逐层访问嵌套的user.status字段 user_status = order["user"]["status"] # 自定义过滤条件,这里保留在线/在游戏中的订单 if user_status in ["ingame", "online"]: price = order["platinum"] prezzi.append(price) # 降序排序并打印(原代码的key=int可省略,因为platinum本身是整数类型) print(sorted(prezzi, reverse=True))
关键细节说明:
- 嵌套字段访问:
order["user"]["status"]是逐层深入字典的标准写法,只要API返回的结构稳定,就能直接链式访问。如果担心字段缺失报错,可以加个兜底判断(比如if "user" in order and "status" in order["user"]),不过Warframe Market的API结构很规范,一般不需要。 - 过滤条件灵活调整:你可以根据需求修改
["ingame", "online"],比如只保留"ingame"状态,或者添加其他合法状态值。 - 排序优化:原代码里的
key=int其实多余,因为API返回的platinum本身就是整数类型,直接用reverse=True就能实现降序排列。
如果还有其他JSON解析相关的疑问,随时问哦~
内容的提问来源于stack exchange,提问作者SHADOWSLIFER
相关产品推荐
相关产品推荐

