Quelles sont les meilleures pratiques pour extraire des valeurs d'objets JSON Python imbriqués ?

PythonPythonBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Naviguer et extraire des données d'objets JSON Python imbriqués est une tâche courante dans le traitement des données. Que vous travailliez avec des API, des fichiers de configuration ou du stockage de données, comprendre comment extraire efficacement des valeurs de structures JSON complexes est essentiel pour tout développeur Python.

Dans ce lab, vous apprendrez des techniques pratiques pour extraire des valeurs d'objets JSON imbriqués en utilisant Python. Vous explorerez diverses approches, de l'indexation de base aux méthodes plus robustes qui gèrent gracieusement les clés manquantes. À la fin de ce lab, vous aurez une expérience pratique des meilleures pratiques pour le traitement des données JSON imbriquées dans vos projets Python.

Création et Compréhension des Objets JSON Imbriqués

JSON (JavaScript Object Notation) est un format d'échange de données léger, lisible par l'homme et facile à analyser pour les machines. En Python, les données JSON sont généralement représentées sous forme de dictionnaires et de listes.

Commençons par créer un exemple d'objet JSON imbriqué pour travailler tout au long de ce lab.

Création d'un Fichier JSON Exemple

  1. Ouvrez l'interface WebIDE et créez un nouveau fichier appelé sample.json dans le répertoire /home/labex/project.

  2. Copiez le contenu JSON suivant dans le fichier :

{
  "person": {
    "name": "John Doe",
    "age": 35,
    "contact": {
      "email": "[email protected]",
      "phone": "555-123-4567"
    },
    "address": {
      "street": "123 Main St",
      "city": "Anytown",
      "state": "CA",
      "zip": "12345"
    },
    "hobbies": ["reading", "hiking", "photography"],
    "employment": {
      "company": "Tech Solutions Inc.",
      "position": "Software Developer",
      "years": 5,
      "projects": [
        {
          "name": "Project Alpha",
          "status": "completed"
        },
        {
          "name": "Project Beta",
          "status": "in-progress"
        }
      ]
    }
  }
}
  1. Enregistrez le fichier.

Compréhension de la Structure JSON

Cet objet JSON représente une personne avec divers attributs. La structure comprend :

  • Des paires clé-valeur simples (name, age)
  • Des objets imbriqués (contact, address, employment)
  • Des tableaux (hobbies)
  • Des tableaux d'objets (projects)

Comprendre la structure de vos données JSON est la première étape pour en extraire efficacement les valeurs. Visualisons cette structure :

person
 ├── name
 ├── age
 ├── contact
 │   ├── email
 │   └── phone
 ├── address
 │   ├── street
 │   ├── city
 │   ├── state
 │   └── zip
 ├── hobbies [array]
 └── employment
     ├── company
     ├── position
     ├── years
     └── projects [array of objects]
         ├── name
         └── status

Chargement de JSON en Python

Maintenant, créons un script Python pour charger ce fichier JSON. Créez un nouveau fichier appelé json_basics.py dans le même répertoire :

import json

## Load JSON from file
with open('sample.json', 'r') as file:
    data = json.load(file)

## Verify data loaded successfully
print("JSON data loaded successfully!")
print(f"Type of data: {type(data)}")
print(f"Keys at the top level: {list(data.keys())}")
print(f"Keys in the person object: {list(data['person'].keys())}")

Exécutez le script avec la commande suivante :

python3 json_basics.py

Vous devriez voir une sortie similaire à :

JSON data loaded successfully!
Type of data: <class 'dict'>
Keys at the top level: ['person']
Keys in the person object: ['name', 'age', 'contact', 'address', 'hobbies', 'employment']

Cela confirme que notre fichier JSON a été correctement chargé en tant que dictionnaire Python. Dans l'étape suivante, nous explorerons différentes méthodes pour extraire des valeurs de cette structure imbriquée.

Méthodes de Base pour Accéder aux Données JSON

Maintenant que nos données JSON sont chargées, explorons les méthodes de base pour accéder aux valeurs dans les objets JSON imbriqués.

Indexation Directe avec des Crochets

La méthode la plus simple pour accéder aux valeurs dans un objet JSON imbriqué consiste à utiliser des crochets avec les clés appropriées. Créons un nouveau fichier appelé direct_access.py :

import json

## Load JSON from file
with open('sample.json', 'r') as file:
    data = json.load(file)

## Access simple values
name = data["person"]["name"]
age = data["person"]["age"]
print(f"Name: {name}, Age: {age}")

## Access nested values
email = data["person"]["contact"]["email"]
city = data["person"]["address"]["city"]
print(f"Email: {email}, City: {city}")

## Access array values
first_hobby = data["person"]["hobbies"][0]
all_hobbies = data["person"]["hobbies"]
print(f"First hobby: {first_hobby}")
print(f"All hobbies: {all_hobbies}")

## Access values in arrays of objects
first_project_name = data["person"]["employment"]["projects"][0]["name"]
first_project_status = data["person"]["employment"]["projects"][0]["status"]
print(f"First project: {first_project_name}, Status: {first_project_status}")

Exécutez le script :

python3 direct_access.py

Vous devriez voir une sortie similaire à :

Name: John Doe, Age: 35
Email: [email protected], City: Anytown
First hobby: reading
All hobbies: ['reading', 'hiking', 'photography']
First project: Project Alpha, Status: completed

Le Problème avec l'Indexation Directe

L'indexation directe fonctionne bien lorsque vous connaissez la structure exacte de vos données JSON et que vous êtes certain que toutes les clés existent. Cependant, si une clé est manquante, elle lèvera une exception KeyError.

Démontrons ce problème en créant un fichier appelé error_demo.py :

import json

## Load JSON from file
with open('sample.json', 'r') as file:
    data = json.load(file)

try:
    ## Try to access a key that doesn't exist
    occupation = data["person"]["occupation"]
    print(f"Occupation: {occupation}")
except KeyError as e:
    print(f"Error occurred: KeyError - {e}")

## Now let's try a nested key that doesn't exist
try:
    salary = data["person"]["employment"]["salary"]
    print(f"Salary: {salary}")
except KeyError as e:
    print(f"Error occurred: KeyError - {e}")

Exécutez le script :

python3 error_demo.py

Vous devriez voir une sortie similaire à :

Error occurred: KeyError - 'occupation'
Error occurred: KeyError - 'salary'

Comme vous pouvez le constater, l'indexation directe lève des exceptions lorsque les clés n'existent pas. Dans les applications du monde réel, en particulier lorsque vous travaillez avec des API externes ou des données générées par l'utilisateur, la structure des objets JSON peut varier. Dans l'étape suivante, nous explorerons des méthodes plus sûres pour accéder aux données JSON imbriquées qui gèrent gracieusement les clés manquantes.

Méthodes Sûres pour Accéder aux Données JSON Imbriquées

Dans les applications du monde réel, vous devez souvent gérer les cas où des clés peuvent être manquantes ou où la structure du JSON peut varier. Explorons des méthodes plus sûres pour accéder aux données JSON imbriquées.

Utilisation de la Méthode get()

La méthode get() des dictionnaires vous permet de fournir une valeur par défaut si une clé n'est pas trouvée, ce qui empêche les exceptions KeyError. Créons un fichier appelé safe_access.py :

import json

## Load JSON from file
with open('sample.json', 'r') as file:
    data = json.load(file)

## Using get() for safer access
name = data.get("person", {}).get("name", "Unknown")
## If the "occupation" key doesn't exist, "Not specified" will be returned
occupation = data.get("person", {}).get("occupation", "Not specified")

print(f"Name: {name}")
print(f"Occupation: {occupation}")

## Accessing deeply nested values with get()
company = data.get("person", {}).get("employment", {}).get("company", "Unknown")
salary = data.get("person", {}).get("employment", {}).get("salary", "Not specified")

print(f"Company: {company}")
print(f"Salary: {salary}")

## Providing default values for arrays
hobbies = data.get("person", {}).get("hobbies", [])
skills = data.get("person", {}).get("skills", ["No skills listed"])

print(f"Hobbies: {', '.join(hobbies)}")
print(f"Skills: {', '.join(skills)}")

Exécutez le script :

python3 safe_access.py

Vous devriez voir une sortie similaire à :

Name: John Doe
Occupation: Not specified
Company: Tech Solutions Inc.
Salary: Not specified
Hobbies: reading, hiking, photography
Skills: No skills listed

Remarquez comment nous n'avons pas obtenu d'erreurs même si certaines clés comme "occupation" et "skills" n'existent pas dans notre JSON. Au lieu de cela, nous avons obtenu les valeurs par défaut que nous avons spécifiées.

Enchaînement de get() pour les Données Profondément Imbriquées

Lorsque vous travaillez avec des structures JSON profondément imbriquées, l'enchaînement de plusieurs appels get() peut devenir verbeux et difficile à lire. Créons une version plus lisible avec des variables. Créez un fichier appelé chained_get.py :

import json

## Load JSON from file
with open('sample.json', 'r') as file:
    data = json.load(file)

## Step-by-step approach for deeply nested values
person = data.get("person", {})
employment = person.get("employment", {})
projects = employment.get("projects", [])

## Get the first project or an empty dict if projects list is empty
first_project = projects[0] if projects else {}
project_name = first_project.get("name", "No project")
project_status = first_project.get("status", "Unknown")

print(f"Project: {project_name}, Status: {project_status}")

## Let's try a non-existent path
person = data.get("person", {})
education = person.get("education", {})
degree = education.get("degree", "Not specified")

print(f"Degree: {degree}")

Exécutez le script :

python3 chained_get.py

Vous devriez voir une sortie similaire à :

Project: Project Alpha, Status: completed
Degree: Not specified

Cette approche est plus lisible car nous décomposons les niveaux d'imbrication en variables distinctes. Elle est également sûre car nous fournissons des valeurs par défaut à chaque niveau.

Utilisation d'un defaultdict

Une autre approche consiste à utiliser le defaultdict de Python du module collections, qui fournit automatiquement des valeurs par défaut pour les clés manquantes. Créez un fichier appelé default_dict.py :

import json
from collections import defaultdict

## Function to create a nested defaultdict
def nested_defaultdict():
    return defaultdict(nested_defaultdict)

## Load JSON from file
with open('sample.json', 'r') as file:
    regular_data = json.load(file)

## Convert to defaultdict
def dict_to_defaultdict(d):
    if not isinstance(d, dict):
        return d
    result = defaultdict(nested_defaultdict)
    for k, v in d.items():
        if isinstance(v, dict):
            result[k] = dict_to_defaultdict(v)
        elif isinstance(v, list):
            result[k] = [dict_to_defaultdict(item) if isinstance(item, dict) else item for item in v]
        else:
            result[k] = v
    return result

## Convert our data to defaultdict
data = dict_to_defaultdict(regular_data)

## Now we can access keys that don't exist without errors
print(f"Name: {data['person']['name']}")
print(f"Occupation: {data['person']['occupation']}")  ## This key doesn't exist!
print(f"Education: {data['person']['education']['degree']}")  ## Deeply nested non-existent path

## defaultdict returns another defaultdict for missing keys, which might not be what you want
print(f"Type of data['person']['occupation']: {type(data['person']['occupation'])}")

## To get a specific default value, you would use get() even with defaultdict
occupation = data['person'].get('occupation', 'Not specified')
print(f"Occupation with default: {occupation}")

Exécutez le script :

python3 default_dict.py

Vous devriez voir une sortie similaire à :

Name: John Doe
Occupation: defaultdict(<function nested_defaultdict at 0x...>, {})
Education: defaultdict(<function nested_defaultdict at 0x...>, {})
Type of data['person']['occupation']: <class 'collections.defaultdict'>
Occupation with default: Not specified

Bien que defaultdict empêche les exceptions KeyError, il renvoie un autre defaultdict pour les clés manquantes, ce qui pourrait ne pas être la valeur par défaut que vous souhaitez. C'est pourquoi la méthode get() est souvent plus pratique pour fournir des valeurs par défaut spécifiques.

Dans l'étape suivante, nous explorerons comment créer une fonction utilitaire pour extraire des valeurs de JSON profondément imbriqué avec à la fois sécurité et flexibilité.

Création d'une Fonction Utilitaire pour l'Extraction de Valeurs JSON

Maintenant que nous avons exploré différentes méthodes pour accéder aux données JSON imbriquées, créons une fonction utilitaire qui facilite l'extraction de valeurs à partir de structures imbriquées complexes. Cette fonction combinera la sécurité de la méthode get() avec la flexibilité de gérer différents types de données.

La Fonction d'Extraction Basée sur le Chemin

Créez un nouveau fichier appelé json_extractor.py :

import json
from typing import Any, List, Dict, Union, Optional

def extract_value(data: Dict, path: List[str], default: Any = None) -> Any:
    """
    Safely extract a value from a nested dictionary using a path list.

    Args:
        data: The dictionary to extract value from
        path: A list of keys representing the path to the value
        default: The default value to return if the path doesn't exist

    Returns:
        The value at the specified path or the default value if not found
    """
    current = data
    for key in path:
        if isinstance(current, dict) and key in current:
            current = current[key]
        else:
            return default
    return current

## Load JSON from file
with open('sample.json', 'r') as file:
    data = json.load(file)

## Basic usage examples
name = extract_value(data, ["person", "name"], "Unknown")
age = extract_value(data, ["person", "age"], 0)
print(f"Name: {name}, Age: {age}")

## Extracting values that don't exist
occupation = extract_value(data, ["person", "occupation"], "Not specified")
print(f"Occupation: {occupation}")

## Extracting deeply nested values
email = extract_value(data, ["person", "contact", "email"], "No email")
phone = extract_value(data, ["person", "contact", "phone"], "No phone")
print(f"Email: {email}, Phone: {phone}")

## Extracting from arrays
if isinstance(extract_value(data, ["person", "hobbies"], []), list):
    first_hobby = extract_value(data, ["person", "hobbies"], [])[0] if extract_value(data, ["person", "hobbies"], []) else "No hobbies"
else:
    first_hobby = "No hobbies"
print(f"First hobby: {first_hobby}")

## Extracting from arrays of objects
projects = extract_value(data, ["person", "employment", "projects"], [])
if projects and len(projects) > 0:
    first_project_name = extract_value(projects[0], ["name"], "Unknown project")
    first_project_status = extract_value(projects[0], ["status"], "Unknown status")
    print(f"First project: {first_project_name}, Status: {first_project_status}")
else:
    print("No projects found")

Exécutez le script :

python3 json_extractor.py

Vous devriez voir une sortie similaire à :

Name: John Doe, Age: 35
Occupation: Not specified
Email: [email protected], Phone: 555-123-4567
First hobby: reading
First project: Project Alpha, Status: completed

Extracteur JSON Amélioré avec une Chaîne de Chemin

Améliorons notre extracteur pour prendre en charge la notation pointée pour les chemins, ce qui le rend plus intuitif à utiliser. Créez un fichier appelé enhanced_extractor.py :

import json
from typing import Any, Dict, List, Union

def get_nested_value(data: Dict, path_string: str, default: Any = None) -> Any:
    """
    Safely extract a value from a nested dictionary using a dot-separated path string.

    Args:
        data: The dictionary to extract value from
        path_string: A dot-separated string representing the path to the value
        default: The default value to return if the path doesn't exist

    Returns:
        The value at the specified path or the default value if not found
    """
    ## Convert the path string to a list of keys
    path = path_string.split(".")

    ## Start with the full dictionary
    current = data

    ## Follow the path
    for key in path:
        ## Handle list indexing with [n] notation
        if key.endswith("]") and "[" in key:
            list_key, index_str = key.split("[")
            index = int(index_str[:-1])  ## Remove the closing bracket and convert to int

            ## Get the list
            if list_key:  ## If there's a key before the bracket
                if not isinstance(current, dict) or list_key not in current:
                    return default
                current = current[list_key]

            ## Get the item at the specified index
            if not isinstance(current, list) or index >= len(current):
                return default
            current = current[index]
        else:
            ## Regular dictionary key
            if not isinstance(current, dict) or key not in current:
                return default
            current = current[key]

    return current

## Load JSON from file
with open('sample.json', 'r') as file:
    data = json.load(file)

## Test the enhanced extractor
print("Basic access:")
print(f"Name: {get_nested_value(data, 'person.name', 'Unknown')}")
print(f"Age: {get_nested_value(data, 'person.age', 0)}")
print(f"Occupation: {get_nested_value(data, 'person.occupation', 'Not specified')}")

print("\nNested access:")
print(f"Email: {get_nested_value(data, 'person.contact.email', 'No email')}")
print(f"City: {get_nested_value(data, 'person.address.city', 'Unknown city')}")

print("\nArray access:")
print(f"First hobby: {get_nested_value(data, 'person.hobbies[0]', 'No hobbies')}")
print(f"Second hobby: {get_nested_value(data, 'person.hobbies[1]', 'No second hobby')}")
print(f"Non-existent hobby: {get_nested_value(data, 'person.hobbies[10]', 'No such hobby')}")

print("\nComplex access:")
print(f"Company: {get_nested_value(data, 'person.employment.company', 'Unknown company')}")
print(f"First project name: {get_nested_value(data, 'person.employment.projects[0].name', 'No project')}")
print(f"Second project status: {get_nested_value(data, 'person.employment.projects[1].status', 'Unknown status')}")
print(f"Non-existent project: {get_nested_value(data, 'person.employment.projects[2].name', 'No such project')}")
print(f"Education: {get_nested_value(data, 'person.education.degree', 'No education info')}")

Exécutez le script :

python3 enhanced_extractor.py

Vous devriez voir une sortie similaire à :

Basic access:
Name: John Doe
Age: 35
Occupation: Not specified

Nested access:
Email: [email protected]
City: Anytown

Array access:
First hobby: reading
Second hobby: hiking
Non-existent hobby: No such hobby

Complex access:
Company: Tech Solutions Inc.
First project name: Project Alpha
Second project status: in-progress
Non-existent project: No such project
Education: No education info

Application Pratique

Appliquons maintenant notre extracteur JSON amélioré à un scénario réel plus complexe. Créez un fichier appelé practical_example.py :

import json
import os
from typing import Any, Dict, List

## Import our enhanced extractor function
from enhanced_extractor import get_nested_value

## Create a more complex JSON structure for reporting
report_data = {
    "company": "Global Analytics Ltd.",
    "report_date": "2023-11-01",
    "departments": [
        {
            "name": "Engineering",
            "manager": "Alice Johnson",
            "employee_count": 45,
            "projects": [
                {"id": "E001", "name": "API Gateway", "status": "completed", "budget": 125000},
                {"id": "E002", "name": "Mobile App", "status": "in-progress", "budget": 200000}
            ]
        },
        {
            "name": "Marketing",
            "manager": "Bob Smith",
            "employee_count": 28,
            "projects": [
                {"id": "M001", "name": "Q4 Campaign", "status": "planning", "budget": 75000}
            ]
        },
        {
            "name": "Customer Support",
            "manager": "Carol Williams",
            "employee_count": 32,
            "projects": []
        }
    ],
    "financial": {
        "current_quarter": {
            "revenue": 2500000,
            "expenses": 1800000,
            "profit_margin": 0.28
        },
        "previous_quarter": {
            "revenue": 2300000,
            "expenses": 1750000,
            "profit_margin": 0.24
        }
    }
}

## Save this data to a JSON file for demonstration
with open('report.json', 'w') as file:
    json.dump(report_data, file, indent=2)

print("Report data saved to report.json")

## Now let's extract useful information from this report
def generate_summary(data: Dict) -> str:
    """Generate a summary of the company report"""

    company = get_nested_value(data, "company", "Unknown Company")
    report_date = get_nested_value(data, "report_date", "Unknown Date")

    ## Financial summary
    current_revenue = get_nested_value(data, "financial.current_quarter.revenue", 0)
    previous_revenue = get_nested_value(data, "financial.previous_quarter.revenue", 0)
    revenue_change = current_revenue - previous_revenue
    revenue_change_percent = (revenue_change / previous_revenue * 100) if previous_revenue > 0 else 0

    ## Department summary
    departments = get_nested_value(data, "departments", [])
    total_employees = sum(get_nested_value(dept, "employee_count", 0) for dept in departments)

    ## Project counts
    total_projects = sum(len(get_nested_value(dept, "projects", [])) for dept in departments)
    completed_projects = sum(
        1 for dept in departments
        for proj in get_nested_value(dept, "projects", [])
        if get_nested_value(proj, "status", "") == "completed"
    )

    ## Generate summary text
    summary = f"Company Report Summary for {company} as of {report_date}\n"
    summary += "=" * 50 + "\n\n"

    summary += "Financial Overview:\n"
    summary += f"- Current Quarter Revenue: ${current_revenue:,}\n"
    summary += f"- Revenue Change: ${revenue_change:,} ({revenue_change_percent:.1f}%)\n\n"

    summary += "Operational Overview:\n"
    summary += f"- Total Departments: {len(departments)}\n"
    summary += f"- Total Employees: {total_employees}\n"
    summary += f"- Total Projects: {total_projects}\n"
    summary += f"- Completed Projects: {completed_projects}\n\n"

    summary += "Department Details:\n"
    for i, dept in enumerate(departments):
        dept_name = get_nested_value(dept, "name", f"Department {i+1}")
        manager = get_nested_value(dept, "manager", "No manager")
        employees = get_nested_value(dept, "employee_count", 0)
        projects = get_nested_value(dept, "projects", [])

        summary += f"- {dept_name} (Manager: {manager})\n"
        summary += f"  * Employees: {employees}\n"
        summary += f"  * Projects: {len(projects)}\n"

        if projects:
            for proj in projects:
                proj_name = get_nested_value(proj, "name", "Unnamed Project")
                proj_status = get_nested_value(proj, "status", "unknown")
                proj_budget = get_nested_value(proj, "budget", 0)

                summary += f"    - {proj_name} (Status: {proj_status}, Budget: ${proj_budget:,})\n"
        else:
            summary += "    - No active projects\n"

        summary += "\n"

    return summary

## Generate and display the summary
summary = generate_summary(report_data)
print("\nGenerated Report Summary:")
print(summary)

## Save the summary to a file
with open('report_summary.txt', 'w') as file:
    file.write(summary)

print("Summary saved to report_summary.txt")

Exécutez le script :

python3 practical_example.py

Vous devriez voir un message confirmant que les données du rapport ont été enregistrées, suivi d'un résumé détaillé du rapport de l'entreprise.

Vérifiez le fichier de sortie :

cat report_summary.txt

Cet exemple pratique démontre comment notre utilitaire d'extraction JSON peut être utilisé pour créer des outils de reporting robustes qui gèrent gracieusement les données manquantes. La fonction get_nested_value nous permet d'extraire en toute sécurité des valeurs de structures imbriquées complexes sans nous soucier des exceptions KeyErrors ou NoneType.

Résumé des Meilleures Pratiques

Basées sur les techniques que nous avons explorées dans ce lab, voici les meilleures pratiques pour extraire des valeurs d'objets JSON imbriqués :

  1. Utilisez la méthode get() au lieu de l'indexation directe pour fournir des valeurs par défaut pour les clés manquantes.
  2. Créez des fonctions utilitaires pour les schémas d'extraction JSON courants afin d'éviter le code répétitif.
  3. Gérez les chemins manquants avec élégance en fournissant des valeurs par défaut raisonnables.
  4. Vérifiez le type des valeurs avant de les traiter pour éviter les erreurs (par exemple, vérifier si une valeur est une liste avant d'accéder à un index).
  5. Décomposez les chemins complexes en variables distinctes pour une meilleure lisibilité.
  6. Utilisez des chaînes de chemin avec la notation pointée pour un accès plus intuitif aux valeurs imbriquées.
  7. Documentez votre code d'extraction pour clarifier ce que vous recherchez dans la structure JSON.

En suivant ces meilleures pratiques, vous pouvez écrire un code plus robuste et maintenable pour travailler avec des objets JSON imbriqués en Python.

Résumé

Dans ce lab, vous avez appris des techniques pratiques pour extraire des valeurs d'objets JSON imbriqués en Python. Vous avez commencé par comprendre la structure du JSON imbriqué et comment charger les données JSON en Python. Vous avez ensuite exploré diverses méthodes pour accéder aux données imbriquées, de l'indexation de base aux approches plus robustes.

Les points clés à retenir de ce lab incluent :

  1. Compréhension de la Structure JSON : Reconnaître la nature hiérarchique des objets JSON imbriqués est fondamental pour accéder efficacement à leurs valeurs.

  2. Méthodes d'Accès de Base : L'indexation directe avec des crochets fonctionne lorsque vous êtes certain de la structure de vos données JSON.

  3. Techniques d'Accès Sûr : L'utilisation de la méthode get() fournit des valeurs par défaut pour les clés manquantes, rendant votre code plus robuste lors du traitement de structures de données incertaines.

  4. Fonctions Utilitaires : La création de fonctions spécialisées pour l'extraction JSON peut simplifier considérablement votre code et le rendre plus maintenable.

  5. Accès Basé sur le Chemin : L'utilisation de chaînes de chemin avec la notation pointée offre un moyen intuitif d'accéder aux valeurs profondément imbriquées.

  6. Application Réelle : L'application de ces techniques à des scénarios pratiques aide à la construction d'outils de traitement de données robustes.

En suivant ces meilleures pratiques, vous pouvez écrire un code plus résilient qui gère avec élégance les complexités des données JSON imbriquées, même lorsque la structure est irrégulière ou contient des valeurs manquantes.