Close Menu
    Trending
    • Optimizing Data Transfer in Distributed AI/ML Training Workloads
    • Achieving 5x Agentic Coding Performance with Few-Shot Prompting
    • Why the Sophistication of Your Prompt Correlates Almost Perfectly with the Sophistication of the Response, as Research by Anthropic Found
    • From Transactions to Trends: Predict When a Customer Is About to Stop Buying
    • America’s coming war over AI regulation
    • “Dr. Google” had its issues. Can ChatGPT Health do better?
    • Evaluating Multi-Step LLM-Generated Content: Why Customer Journeys Require Structural Metrics
    • Why SaaS Product Management Is the Best Domain for Data-Driven Professionals in 2026
    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

    Optimizing Data Transfer in Distributed AI/ML Training Workloads

    January 23, 2026
    Artificial Intelligence

    Achieving 5x Agentic Coding Performance with Few-Shot Prompting

    January 23, 2026
    Artificial Intelligence

    Why the Sophistication of Your Prompt Correlates Almost Perfectly with the Sophistication of the Response, as Research by Anthropic Found

    January 23, 2026
    Add A Comment
    Leave A Reply Cancel Reply

    Top Posts

    The MCP Security Survival Guide: Best Practices, Pitfalls, and Real-World Lessons

    August 7, 2025

    ChatGPT får långtidsminne – kommer nu ihåg alla dina konversationer

    April 13, 2025

    Googles nya AI kan kartlägga hela jorden – fungerar som en virtuell satellit

    August 12, 2025

    How we really judge AI

    June 10, 2025

    A faster problem-solving tool that guarantees feasibility | MIT News

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

    Shaip Democratizes Access to Critical Healthcare Data Through Partnership with Databricks Marketplace

    April 5, 2025

    Fine-Tuning vLLMs for Document Understanding

    May 5, 2025

    “Robot, make me a chair” | MIT News

    December 16, 2025
    Our Picks

    Optimizing Data Transfer in Distributed AI/ML Training Workloads

    January 23, 2026

    Achieving 5x Agentic Coding Performance with Few-Shot Prompting

    January 23, 2026

    Why the Sophistication of Your Prompt Correlates Almost Perfectly with the Sophistication of the Response, as Research by Anthropic Found

    January 23, 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.