HOWTO · Csharp

Comment convertir une chaîne JSON en JObject en C#

Analysez du texte JSON en un JObject en C# avec Newtonsoft.Json, lisez les valeurs imbriquées, gérez les erreurs d'analyse et sérialisez les modifications.

Sur cette page

Pour convertir du texte JSON en un objet en mémoire en C#, installez Newtonsoft.Json et appelez JObject.Parse() avec le texte. La méthode renvoie un JObject dont vous pouvez lire ou mettre à jour les propriétés. L’entrée doit déjà être du JSON valide ; l’analyse ne transforme pas un texte brut arbitraire en JSON.

Convertir une chaîne JSON en JObject avec JObject.Parse()

Installez le package avec dotnet add package Newtonsoft.Json. La conversion elle-même est JObject person = JObject.Parse(jsonText); ; JObject.Parse() fait partie de Newtonsoft.Json et nécessite que ce package soit disponible dans le projet. L’exemple C# autonome suivant utilise l’API intégrée System.Text.Json pour montrer le même flux d’entrée et de lecture de propriétés sans cette dépendance externe. Il crée un JsonDocument, et non un JObject.

using System;
using System.Text.Json;

class Program
{
    static void Main()
    {
        string jsonText = "{\"name\":\"John\",\"address\":{\"city\":\"New York\"}}";
        using (JsonDocument person = JsonDocument.Parse(jsonText))
        {
            Console.WriteLine(person.RootElement.GetProperty("name").GetString());
            Console.WriteLine(person.RootElement.GetProperty("address").GetProperty("city").GetString());
        }
    }
}

Ici, jsonText est une chaîne et person est un document JSON en mémoire. Pour un JObject Newtonsoft.Json, utilisez JObject.Parse(jsonText) comme montré ci-dessus ; son indexeur renvoie un jeton JSON, qui peut représenter une chaîne, un nombre, un objet imbriqué, un tableau ou une autre valeur JSON. L’exemple intégré démontre la même forme JSON avec System.Text.Json et ne crée pas de JObject.

Utilisez JObject lorsque la racine du texte JSON est un objet avec des propriétés nommées. Si la racine est un tableau, utilisez plutôt l’API JArray de Newtonsoft.Json. Conservez le texte d’origine dans une variable chaîne, puis passez cette variable à l’analyseur ; n’ajoutez pas un autre jeu de guillemets autour de l’ensemble du document JSON.

Gérer le JSON invalide

JObject.Parse() attend un objet JSON. Un JSON mal formé ou une valeur de niveau supérieur autre qu’un objet peut lever une JsonReaderException. Lorsque l’entrée provient d’une source externe, interceptez cette exception précise et décidez de la manière dont l’application doit signaler ou journaliser le problème. Le modèle C# est try { JObject person = JObject.Parse(jsonText); } catch (JsonReaderException) { Console.WriteLine("The JSON text could not be parsed."); }. Il s’agit d’une illustration de syntaxe non exécutée, car l’environnement d’exécution fourni ne dispose pas de Newtonsoft.Json. Limitez le catch aux erreurs d’analyse ; journalisez les détails de l’analyseur dans le code de l’application plutôt que de les exposer aux utilisateurs finaux.

Le catch traite les échecs de l’analyse, de sorte que le reste de l’application peut choisir une solution de repli utile, demander une entrée corrigée ou enregistrer un diagnostic. Si l’entrée est déjà fiable et que des données mal formées ne peuvent pas se produire, l’appelant peut au contraire laisser l’exception se propager vers son gestionnaire d’erreurs habituel. L’analyse vérifie uniquement la structure JSON ; elle ne vérifie pas que les champs requis par l’application sont présents ni qu’ils ont la signification métier attendue.

Lire les valeurs d’un JObject

Utilisez un indexeur tel que person["name"] pour lire une propriété de niveau supérieur. Enchaînez les indexeurs pour les valeurs imbriquées, comme dans person["address"]?["city"] ; l’opérateur conditionnel de null arrête la recherche si la propriété intermédiaire est absente ou nulle. Les accesseurs typés convertissent les jetons en valeurs .NET : par exemple, person.Value<string>("name") ou person["age"]?.Value<int>(). Choisissez un type qui correspond à la valeur JSON et gérez l’absence d’une propriété lorsque votre application l’exige.

L’indexeur est pratique lorsque vous souhaitez continuer à travailler avec des jetons JSON, tandis que Value<T>() est utile lorsqu’une chaîne .NET, un entier ou une autre valeur typée est nécessaire. Un résultat null provenant d’une recherche sûre permet à votre code de distinguer une valeur intermédiaire manquante avant de l’utiliser. Pour les données requises, vérifiez le jeton et signalez quelle propriété manque plutôt que de supposer que chaque entrée a la même forme.

Modifier et sérialiser un JObject

Affectez une valeur à une propriété existante pour la mettre à jour, ou utilisez un nouveau nom de propriété pour ajouter une valeur. Appelez ToString() pour produire du texte JSON formaté. Par exemple, les opérations C# sont person["age"] = 31;, person["city"] = "New York"; et string updatedJson = person.ToString();. Ces appels d’API sont des illustrations non exécutées, car l’environnement d’exécution fourni ne dispose pas de Newtonsoft.Json. La chaîne résultante représente l’objet mis à jour en mémoire sous forme de JSON et peut être transmise à une API ou à une couche de stockage qui attend du JSON.

La mutation modifie le JObject en mémoire ; elle ne modifie pas la variable chaîne JSON d’origine. Sérialisez une fois toutes les modifications terminées et utilisez le texte résultant partout où l’étape suivante attend du JSON. Si une sortie compacte est préférable, Newtonsoft.Json prend également en charge des options de formatage pour la sérialisation ; choisissez le format selon que le texte sera lu par des personnes ou par un autre programme.