Close Menu
    Trending
    • Three OpenClaw Mistakes to Avoid and How to Fix Them
    • I Stole a Wall Street Trick to Solve a Google Trends Data Problem
    • How AI is turning the Iran conflict into theater
    • Why Your AI Search Evaluation Is Probably Wrong (And How to Fix It)
    • Machine Learning at Scale: Managing More Than One Model in Production
    • Improving AI models’ ability to explain their predictions | MIT News
    • Write C Code Without Learning C: The Magic of PythoC
    • LatentVLA: Latent Reasoning Models for Autonomous Driving
    ProfitlyAI
    • Home
    • Latest News
    • AI Technology
    • Latest AI Innovations
    • AI Tools & Technologies
    • Artificial Intelligence
    ProfitlyAI
    Home » Stop Writing Spaghetti if-else Chains: Parsing JSON with Python’s match-case
    Artificial Intelligence

    Stop Writing Spaghetti if-else Chains: Parsing JSON with Python’s match-case

    ProfitlyAIBy ProfitlyAIDecember 14, 2025No Comments7 Mins Read
    Share Facebook Twitter Pinterest LinkedIn Tumblr Reddit Telegram Email
    Share
    Facebook Twitter LinkedIn Pinterest Email


    In the event you work in information science, information engineering, or as as a frontend/backend developer, you cope with JSON. For professionals, its principally solely loss of life, taxes, and JSON-parsing that’s inevitable. The difficulty is that parsing JSON is commonly a critical ache.

    Whether or not you might be pulling information from a REST API, parsing logs, or studying configuration recordsdata, you finally find yourself with a nested dictionary that it is advisable unravel. And let’s be sincere: the code we write to deal with these dictionaries is commonly…ugly to say the least.

    We’ve all written the “Spaghetti Parser.” the one. It begins with a easy if assertion, however then it is advisable verify if a key exists. Then it is advisable verify if the checklist inside that secret’s empty. Then it is advisable deal with an error state.

    Earlier than you realize it, you’ve gotten a 40-line tower of if-elif-else statements that’s troublesome to learn and even more durable to take care of. Pipelines will find yourself breaking as a result of some unexpected edge case. Unhealthy vibes throughout!

    In Python 3.10 that got here out a number of years in the past, a characteristic was launched that many information scientists nonetheless haven’t adopted: Structural Sample Matching with match and case. It’s usually mistaken for a easy “Swap” assertion (like in C or Java), however it’s rather more highly effective. It means that you can verify the form and construction of your information, reasonably than simply its worth.

    On this article, we’ll have a look at exchange your fragile dictionary checks with elegant, readable patterns by utilizing match and case. I’ll deal with a particular use-case that many people are acquainted with, reasonably than making an attempt to provide a comprehension overview of how one can work with match and case.


    The Situation: The “Thriller” API Response

    Let’s think about a typical situation. You’re polling an exterior API that you just don’t have full management over. Let’s say, to make the setting concrete, that the API returns the standing of an information processing job in a JSON-format. The API is a bit inconsistent (as they usually are).

    It’d return a Success response:

    {
        "standing": 200,
        "information": {
            "job_id": 101,
            "outcome": ["file_a.csv", "file_b.csv"]
        }
    }

    Or an Error response:

    {
        "standing": 500,
        "error": "Timeout",
        "retry_after": 30
    }

    Or possibly a bizarre legacy response that’s only a checklist of IDs (as a result of the API documentation lied to you):

    [101, 102, 103]

    The Previous Means: The if-else Pyramid of Doom

    In the event you had been penning this utilizing customary Python management circulate, you’d doubtless find yourself with defensive coding that appears like this:

    def process_response(response):
        # Situation 1: Commonplace Dictionary Response
        if isinstance(response, dict):
            standing = response.get("standing")
            
            if standing == 200:
                # We've to watch out that 'information' really exists
                information = response.get("information", {})
                outcomes = information.get("outcome", [])
                print(f"Success! Processed {len(outcomes)} recordsdata.")
                return outcomes
            
            elif standing == 500:
                error_msg = response.get("error", "Unknown Error")
                print(f"Failed with error: {error_msg}")
                return None
            
            else:
                print("Unknown standing code acquired.")
                return None
    
        # Situation 2: The Legacy Listing Response
        elif isinstance(response, checklist):
            print(f"Acquired legacy checklist with {len(response)} jobs.")
            return response
        
        # Situation 3: Rubbish Knowledge
        else:
            print("Invalid response format.")
            return None

    Why does the code above damage my soul?

    • It mixes “What” with “How”: You’re mixing enterprise logic (“Success means standing 200”) with kind checking instruments like isinstance() and .get().
    • It’s Verbose: We spend half the code simply verifying that keys exist to keep away from a KeyError.
    • Exhausting to Scan: To grasp what constitutes a “Success,” you need to mentally parse a number of nested indentation ranges.

    A Higher Means: Structural Sample Matching

    Enter the match and case key phrases.

    As an alternative of asking questions like “Is that this a dictionary? Does it have a key known as standing? Is that key 200?”, we are able to merely describe the form of the information we wish to deal with. Python makes an attempt to suit the information into that form.

    Right here is the very same logic rewritten with match and case:

    def process_response_modern(response):
        match response:
            # Case 1: Success (Matches particular keys AND values)
            case {"standing": 200, "information": {"outcome": outcomes}}:
                print(f"Success! Processed {len(outcomes)} recordsdata.")
                return outcomes
    
            # Case 2: Error (Captures the error message and retry time)
            case {"standing": 500, "error": msg, "retry_after": time}:
                print(f"Failed: {msg}. Retrying in {time}s...")
                return None
    
            # Case 3: Legacy Listing (Matches any checklist of integers)
            case [first, *rest]:
                print(f"Acquired legacy checklist beginning with ID: {first}")
                return response
    
            # Case 4: Catch-all (The 'else' equal)
            case _:
                print("Invalid response format.")
                return None

    Discover that it’s a few traces shorter, however that is hardly the one benefit.

    Why Structural Sample Matching Is Superior

    I can provide you with at the least three the reason why structural sample matching with match and case improves the state of affairs above.

    1. Implicit Variable Unpacking

    Discover what occurred in Case 1:

    case {"standing": 200, "information": {"outcome": outcomes}}:

    We didn’t simply verify for the keys. We concurrently checked that standing is 200 AND extracted the worth of outcome right into a variable named outcomes.

    We changed information = response.get("information").get("outcome") with a easy variable placement. If the construction doesn’t match (e.g., outcome is lacking), this case is solely skipped. No KeyError, no crashes.

    2. Sample “Wildcards”

    In Case 2, we used msg and time as placeholders:

    case {"standing": 500, "error": msg, "retry_after": time}:

    This tells Python: I count on a dictionary with standing 500, and some worth equivalent to the keys "error" and "retry_after". No matter these values are, bind them to the variables msg and time so I can use them instantly.

    3. Listing Destructuring

    In Case 3, we dealt with the checklist response:

    case [first, *rest]:

    This sample matches any checklist that has at the least one component. It binds the primary component to first and the remainder of the checklist to relaxation. That is extremely helpful for recursive algorithms or for processing queues.


    Including “Guards” for Further Management

    Generally, matching the construction isn’t sufficient. You wish to match a construction provided that a particular situation is met. You are able to do this by including an if clause on to the case.

    Think about we solely wish to course of the legacy checklist if it accommodates fewer than 10 objects.

    case [first, *rest] if len(relaxation) < 9:
            print(f"Processing small batch beginning with {first}")

    If the checklist is simply too lengthy, this case falls via, and the code strikes to the subsequent case (or the catch-all _).

    Conclusion

    I’m not suggesting you exchange each easy if assertion with a match block. Nonetheless, you need to strongly think about using match and case when you’re:

    1. Parsing API Responses: As proven above, that is the killer use case.
    2. Dealing with Polymorphic Knowledge: When a perform would possibly obtain a int, a str, or a dict and must behave otherwise for every.
    3. Traversing ASTs or JSON Bushes: If you’re writing scripts to scrape or clear messy internet information.

    As information professionals, our job is commonly 80% cleansing information and 20% modeling. Something that makes the cleansing section much less error-prone and extra readable is an enormous win for productiveness.

    Contemplate ditching the if-else spaghetti. Let the match and case instruments do the heavy lifting as a substitute.

    If you’re all in favour of AI, information science, or information engineering, please observe me or join on LinkedIn.



    Source link

    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    Previous ArticleThe Machine Learning “Advent Calendar” Day 13: LASSO and Ridge Regression in Excel
    Next Article OpenAI lanserar GPT-5.2 med bättre kontextförståelse
    ProfitlyAI
    • Website

    Related Posts

    Artificial Intelligence

    Three OpenClaw Mistakes to Avoid and How to Fix Them

    March 9, 2026
    Artificial Intelligence

    I Stole a Wall Street Trick to Solve a Google Trends Data Problem

    March 9, 2026
    Artificial Intelligence

    Why Your AI Search Evaluation Is Probably Wrong (And How to Fix It)

    March 9, 2026
    Add A Comment
    Leave A Reply Cancel Reply

    Top Posts

    Efficient Graph Storage for Entity Resolution Using Clique-Based Compression

    May 15, 2025

    Can You Trust LLM Judges? How to Build Reliable Evaluations

    August 26, 2025

    From Reporting to Reasoning: How AI Is Rewriting the Rules of Data App Development

    July 1, 2025

    Building the AI-enabled enterprise of the future

    September 3, 2025

    What is Facial Recognition? How does it works?

    April 5, 2025
    Categories
    • AI Technology
    • AI Tools & Technologies
    • Artificial Intelligence
    • Latest AI Innovations
    • Latest News
    Most Popular

    School of Architecture and Planning welcomes new faculty for 2025 | MIT News

    August 6, 2025

    Läkare varnar för nya ChatGPT Health funktionen

    January 20, 2026

    OpenAI has trained its LLM to confess to bad behavior

    December 3, 2025
    Our Picks

    Three OpenClaw Mistakes to Avoid and How to Fix Them

    March 9, 2026

    I Stole a Wall Street Trick to Solve a Google Trends Data Problem

    March 9, 2026

    How AI is turning the Iran conflict into theater

    March 9, 2026
    Categories
    • AI Technology
    • AI Tools & Technologies
    • Artificial Intelligence
    • Latest AI Innovations
    • Latest News
    • Privacy Policy
    • Disclaimer
    • Terms and Conditions
    • About us
    • Contact us
    Copyright © 2025 ProfitlyAI All Rights Reserved.

    Type above and press Enter to search. Press Esc to cancel.