【发布时间】:2021-11-29 00:49:42
【问题描述】:
我正在查询一个 API 以尝试在 JSON 中查找新条目,我被困在如何“减去”这两个列表上,以便获得一个新的 JSON 对象,其中只有两个列表之间的新项目。
我现在做的是:
- 我正在查询 API。
- 将 JSON 结果存储到变量中。
- 等待 30 秒。
- 再次查询 API。
- 比较 PreviousJSON == NewJSON
- 如果有区别,那么:
^^ 这是我卡住的地方,我可以比较值,但我不知道如何只找到新值并迭代它们。
我基本上是在监控这个 API: https://qzlsklfacc.medianetwork.cloud/nft_for_sale?collection=galacticgeckospacegarage
并试图找到新的列表和新出售的物品。
现在要比较现有项目之间的差异,我正在执行以下操作:
# check if new listings are the same as the old listings
if prevListings != newListings:
await bot.get_channel(893292122298540083).send("New listings found!")
for listingOld in prevListings:
for listingNew in newListings:
if listingNew['id'] == listingOld['id']:
if listingNew['lastSoldPrice'] is not None:
if listingNew['lastSoldPrice'] != listingOld['lastSoldPrice']:
Do something.
所以这两个问题是:
- 有没有更好的方法来比较两个 JSON 对象中的两个相同条目(未排序)
- 有没有办法获得仅包含 PrevListings 中不存在的新条目的第三个 JSON。
这是 JSON 响应中每个项目的 JSON 结构
0000:
'id':1155682
'token_add':'HV4duJjY67DD4doX9ffvzfoaENAAkFuwz9qtbwAweDAG'
'number':1
'currency':'SOL'
'price':29
'link_img':'https://www.arweave.net/iZs-LiMAg5mIqaqxrd--EtcKhHTNtPZFPrZyIK95nUc?ext=jpeg'
'for_sale':1
'programId':'CJsLwbP1iu5DuUikHEJnLfANgKy6stB2uFgvBBHoyxwz'
'name':'Galactic Gecko #6376'
'description':'undefined'
'escrowAdd':'4TULtxsixV4NLdZWqY45d4Mz5XrE4q4CfTECNcvaZDY1'
'seller_address':'Er6QJPusC1JsUqevTjFKXtYHbgCtJkyo1DNjEBWevWut'
'attributes':'Faction: Barada,Body: Light Pink,Armor: Planetary Kirtle,Mouth: Pensive,Helmet: Signal Deflector,Ears: Planetary Muffler,Eyes: Augmented Surveyor'
'skin':None
'type':'galacticgeckospacegarage'
'ranking':None
'buyerAdd':None
'blockhash':None
'lastSoldPrice':13.99
我正在使用 Python 3.8
谢谢!
【问题讨论】:
-
您应该比较究竟什么。请添加详细说明。
-
您要比较键(0000)还是值(数据)?
-
我想比较 Last Sale Price,如果数据不同,则将整个节点(连同所有子节点)添加到仅包含更新数据的新字典中。那,并且还获取新条目(在 JSON B 中但不在 JSON A 中的 ID,并将它们存储在 JSON C 中(新)