代码之家  ›  专栏  ›  技术社区  ›  jason.r2222

如何在Python中正确比较2个JSON请求-响应字符串

  •  0
  • jason.r2222  · 技术社区  · 2 年前

    我想比较两个Python响应字符串并打印出差异,下面是我的代码:

    导入请求 导入json 导入时间

    getFirst=请求。得到(”https://api-mainnet.magiceden.dev/v2/collections?offset=0&限值=1“ liveRN=json。转储(getFirst.json(),缩进=4)

    尽管如此: get=请求。得到(”https://api-mainnet.magiceden.dev/v2/collections?offset=0&限值=1“ dataPretty=json。转储(get.json(),缩进=4) 数据=获取。json()

    if get.status_code == 200:
        print("ok")
    if dataPretty != data:
        for item in data:
            if str(item) not in liveRN:
                send = 1
                print(f"Found difference: {item}")
    
                symbol = item['symbol']
                img = item['image']
                name = item['name']
                description = item['description']
    
                print(symbol)
                print(img)
                print(name)
                             
            else:
                print("Didnt find")
    else:
        print("No change")
    
    time.sleep(15)
    

    我只想在两个重复不匹配时打印项目,但现在即使字符串匹配,也要打印我想要的项目。

    我试图添加另一个if条件,如果2个请求-响应匹配,它不会做任何事情,只是通过了,但这不起作用

    1 回复  |  直到 2 年前
        1
  •  0
  •   mehrdadep    2 年前

    你可以用 sets 查找字典中的项目是否已更改。我使用了 another question 但这在某种程度上可以用来解决你的问题

    import requests 
    import time
    
    def dict_compare(d1, d2):
        d1_keys = set(d1.keys())
        d2_keys = set(d2.keys())
        shared_keys = d1_keys.intersection(d2_keys)
        added = d1_keys - d2_keys
        removed = d2_keys - d1_keys
        modified = {o : (d1[o], d2[o]) for o in shared_keys if d1[o] != d2[o]}
        same = set(o for o in shared_keys if d1[o] == d2[o])
        return added, removed, modified, same
    
    first = requests.get("https://api-mainnet.magiceden.dev/v2/collections?offset=0&limit=1").json()[0]
    
    while True: 
        get_second = requests.get("https://api-mainnet.magiceden.dev/v2/collections?offset=0&limit=1")
    
        if get_second.status_code == 200:
            print("ok")
    
        second = get_second.json()[0]
        added, removed, modified, same = dict_compare(first, second)
    
        if len(added) > 0 or len(modified) > 0  or len(removed) > 0:
            print("added: ", added)
            print("modified: ", modified)
            print("removed: ", removed)
        else:
            print("No change")
            
        time.sleep(15)