Skip to content
Advertisement

How would you filter through a JSON file and pick out the relevant keys in Python 3.9.x?

I am trying to filter through an API (JSON format). I am pretty new to this and have no idea where to start. For simplicity’s sake, I will only give part of the API output I would technically get. I am using Python 3, specifically Python 3.9.2.

{
    "success": true,
    "currency": "CAD",
    "timestamp": 1615516661,
    "items_list": {
        "AK-47 | Aquamarine Revenge (Minimal Wear)": {
        "name": "AK-47 | Aquamarine Revenge (Minimal Wear)",
        "marketable": 1,
        "tradable": 1,
        "classid": "1819967861",
        "icon_url": "-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpot7HxfDhjxszJemkV09-5gZKKkPLLMrfFqWdY781lxLuW8Njw31Dn8xc_YTqmJ4DDJFM2ZwqE_ATtx-u7g8C5vpjOzHM263E8pSGKJ1XuG9M",
        "icon_url_large": "-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpot7HxfDhjxszJemkV09-5gZKKkPLLMrfFqWdY781lteXA54vwxgbjrkc5ZD3wLNLGcFVrYl6GrAS2x7y7g8PvupidzyRmuCUl4H6IzkSpwUYbC6zHyEM",
        "type": "Weapon",
        "weapon_type": "Rifle",
        "gun_type": "AK-47",
        "exterior": "Minimal Wear",
        "rarity": "Covert",
        "rarity_color": "eb4b4b",
        "price": {
            "24_hours": {
                "average": 65.24,
                "median": 64.41,
                "sold": "46",
                "standard_deviation": "4.43",
                "lowest_price": 61.49,
                "highest_price": 75.76
            },
            "7_days": {
                "average": 64.7,
                "median": 64.49,
                "sold": "240",
                "standard_deviation": "4.32",
                "lowest_price": 53.83,
                "highest_price": 75.76
            },
            "30_days": {
                "average": 59.39,
                "median": 59.3,
                "sold": "982",
                "standard_deviation": "8.84",
                "lowest_price": 0.18,
                "highest_price": 75.76
            },
            "all_time": {
                "average": 38.1,
                "median": 40.48,
                "sold": "169635",
                "standard_deviation": "38.77",
                "lowest_price": 0.18,
                "highest_price": 125.91
            }
        },
        "first_sale_date": "1432764000"
    },
    "AK-47 | Aquamarine Revenge (Well-Worn)": {
        "name": "AK-47 | Aquamarine Revenge (Well-Worn)",
        "marketable": 1,
        "tradable": 1,
        "classid": "2095030666",
        "icon_url": "-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpot7HxfDhjxszJemkV09-5gZKKkPLLMrfFqWZU7Mxkh6eU896n0FXk-RJsNzv3cI-WJAA3YFDTqFa2l-u6jJW4uJqdyCBluyEm-z-DyCua9lLK",
        "icon_url_large": "-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpot7HxfDhjxszJemkV09-5gZKKkPLLMrfFqWZU7Mxkh9bN9J7yjRrhrUFuazjzJteVJlQ6NVHTrFe3wObs15G06picwHFnvid25C3bnhSzn1gSOQz0szG-",
        "type": "Weapon",
        "weapon_type": "Rifle",
        "gun_type": "AK-47",
        "exterior": "Well-Worn",
        "rarity": "Covert",
        "rarity_color": "eb4b4b",
        "price": {
            "24_hours": {
                "average": 34.31,
                "median": 34.14,
                "sold": "40",
                "standard_deviation": "3.67",
                "lowest_price": 31.93,
                "highest_price": 37.23
            },
            "7_days": {
                "average": 35.72,
                "median": 35.8,
                "sold": "382",
                "standard_deviation": "5.07",
                "lowest_price": 29.7,
                "highest_price": 38.93
            },
            "30_days": {
                "average": 33.14,
                "median": 33.11,
                "sold": "1632",
                "standard_deviation": "7",
                "lowest_price": 26.77,
                "highest_price": 38.93
            },
            "all_time": {
                "average": 21.89,
                "median": 23.76,
                "sold": "212874",
                "standard_deviation": "35.16",
                "lowest_price": 11.78,
                "highest_price": 71.85
            }
        },
        "first_sale_date": "1432764000"
        }
    }
}

The output I would like is something like the following:

{
    "success": true,
    "currency": "CAD",
    "timestamp": 1615516661,
    "items_list": {
        "AK-47 | Aquamarine Revenge (Minimal Wear)": {
        "name": "AK-47 | Aquamarine Revenge (Minimal Wear)",
        "type": "Weapon",
        "exterior": "Minimal Wear",
        "rarity": "Covert",
        "price": {
            "24_hours": {
                "average": 65.24,
                "median": 64.41,
                "sold": "46",
                "standard_deviation": "4.43",
                "lowest_price": 61.49,
                "highest_price": 75.76
            },
            "7_days": {
                "average": 64.7,
                "median": 64.49,
                "sold": "240",
                "standard_deviation": "4.32",
                "lowest_price": 53.83,
                "highest_price": 75.76
            },
            "30_days": {
                "average": 59.39,
                "median": 59.3,
                "sold": "982",
                "standard_deviation": "8.84",
                "lowest_price": 0.18,
                "highest_price": 75.76
            },
            "all_time": {
                "average": 38.1,
                "median": 40.48,
                "sold": "169635",
                "standard_deviation": "38.77",
                "lowest_price": 0.18,
                "highest_price": 125.91
            }
        },
    },
    "AK-47 | Aquamarine Revenge (Well-Worn)": {
        "name": "AK-47 | Aquamarine Revenge (Well-Worn)",
        "type": "Weapon",
        "exterior": "Well-Worn",
        "rarity": "Covert",
        "price": {
            "24_hours": {
                "average": 34.31,
                "median": 34.14,
                "sold": "40",
                "standard_deviation": "3.67",
                "lowest_price": 31.93,
                "highest_price": 37.23
            },
            "7_days": {
                "average": 35.72,
                "median": 35.8,
                "sold": "382",
                "standard_deviation": "5.07",
                "lowest_price": 29.7,
                "highest_price": 38.93
            },
            "30_days": {
                "average": 33.14,
                "median": 33.11,
                "sold": "1632",
                "standard_deviation": "7",
                "lowest_price": 26.77,
                "highest_price": 38.93
            },
            "all_time": {
                "average": 21.89,
                "median": 23.76,
                "sold": "212874",
                "standard_deviation": "35.16",
                "lowest_price": 11.78,
                "highest_price": 71.85
            }
        },
        }
    }
}

As you can see, I am removing some of the contents. How can I accomplish this? Any pointers would be appreciated. Thanks in advance!

Advertisement

Answer

Let’s say your file with json data is named api_data.json.

import json

# convert json data to a python dict
with open('api_data.json') as f:
    data = json.load(f)

# data is a python dict
# delete unwanted keys and associated data
del data['items_list']['AK-47 | Aquamarine Revenge (Minimal Wear)']['marketable']
del data['items_list']['AK-47 | Aquamarine Revenge (Minimal Wear)']['tradable']

# Now, save back as json file
with open('api_data.json') as f:
    json.dump(data, f)
User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement