Exemples JSON en 7 langages : JavaScript, Python, Go, Rust, PHP, Java, C#
JSON est universel, mais chaque langage le gère différemment. Voici une référence côte à côte pour analyser, sérialiser et gérer les erreurs dans sept langages populaires.
JavaScript
JavaScript est le terrain natif de JSON. Analysez avec JSON.parse, sérialisez avec JSON.stringify, et enveloppez toujours l'analyse dans un try/catch.
// Parse a JSON string into an object (always guard with try/catch)
let data;
try {
data = JSON.parse('{"name": "Alice", "age": 30}');
console.log(data.name); // "Alice"
} catch (err) {
console.error("Invalid JSON:", err.message);
}
// Serialize an object back to JSON
const json = JSON.stringify(data, null, 2);
// Fetch JSON from an API (res.json() rejects on invalid JSON)
const res = await fetch("/api/users/1");
const user = await res.json(); // parsed automaticallyPython
Le module json intégré à Python associe les objets JSON à des dicts et les tableaux à des lists. Utilisez json.loads (chaîne → objet) et json.dumps (objet → chaîne).
import json
# Parse JSON string into a dict
data = json.loads('{"name": "Alice", "age": 30}')
# Serialize a dict to a pretty JSON string
text = json.dumps(data, indent=2, ensure_ascii=False)
# Read/write a JSON file
with open("data.json", encoding="utf-8") as f:
data = json.load(f)Go
Le package encoding/json de Go associe le JSON à des structs via des tags. Utilisez json.Marshal pour sérialiser et json.Unmarshal pour analyser, les tags de struct contrôlant les noms de champs.
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
// Struct → JSON
b, _ := json.Marshal(User{Name: "Alice", Age: 30})
// JSON → struct
var u User
_ = json.Unmarshal([]byte(`{"name":"Bob","age":25}`), &u)Rust
Rust utilise les crates serde et serde_json pour une (dé)sérialisation à coût nul et type-safe. Dérivez Serialize/Deserialize sur un struct et serde_json s'occupe du reste — y compris des messages d'erreur précis avec ligne et colonne en cas d'échec d'analyse.
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)]
struct User {
name: String,
age: u8,
}
fn main() -> Result<(), serde_json::Error> {
// JSON → struct
let u: User = serde_json::from_str(r#"{"name":"Alice","age":30}"#)?;
// Struct → JSON (pretty-printed)
let json = serde_json::to_string_pretty(&u)?;
println!("{}", json);
Ok(())
}PHP
PHP dispose nativement de json_encode/json_decode, sans aucune dépendance. Passez true en deuxième argument à json_decode pour obtenir des tableaux associatifs au lieu d'objets stdClass, et vérifiez toujours json_last_error() — json_decode renvoie null en cas d'échec, qui est aussi une valeur JSON valide.
<?php
// PHP array → JSON
$json = json_encode(["name" => "Alice", "age" => 30],
JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
// JSON → PHP array
$data = json_decode($json, true);
if (json_last_error() !== JSON_ERROR_NONE) {
echo "JSON error: " . json_last_error_msg();
}Java
Java utilise généralement l'ObjectMapper de Jackson. Les records (Java 16+) font des DTO propres sans boilerplate — Jackson s'y lie directement, y compris la gestion des propriétés inconnues via configure.
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.DeserializationFeature;
record User(String name, int age) {}
ObjectMapper mapper = new ObjectMapper()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// JSON → record
User user = mapper.readValue("{\"name\":\"Alice\",\"age\":30}", User.class);
// Record → JSON
String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(user);C#
Le C# moderne utilise System.Text.Json (intégré à .NET). Des attributs comme JsonPropertyName associent les conventions de nommage JSON aux propriétés PascalCase, et JsonSerializerOptions contrôle la casse en sortie.
using System.Text.Json;
using System.Text.Json.Serialization;
public class User
{
[JsonPropertyName("name")]
public string Name { get; set; } = "";
[JsonPropertyName("age")]
public int Age { get; set; }
}
// JSON → object
var user = JsonSerializer.Deserialize<User>(
"{\"name\":\"Alice\",\"age\":30}")!;
// Object → JSON (camelCase to match JSON conventions)
var options = new JsonSerializerOptions {
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
};
string json = JsonSerializer.Serialize(user, options);Bonnes pratiques universelles
Gérez toujours les erreurs d'analyse — un JSON mal formé fera planter du code non protégé. Pour les API en production, validez par rapport à un JSON Schema avant le traitement. Préférez les structs/classes typés aux maps génériques dans les langages compilés. Affichez en mode lisible pendant le développement, minifiez en production.
FAQ
- Quel langage a l'analyseur JSON le plus rapide ?
- Les langages compilés (Go, Rust, Java avec Jackson, C# avec System.Text.Json) surpassent généralement les langages interprétés. Pour la plupart des applications, la différence est négligeable face aux coûts réseau et de base de données.
- Faut-il utiliser un struct typé ou une map générique ?
- Les structs/classes typés détectent les incompatibilités de schéma à la compilation et offrent l'autocomplétion. N'utilisez les maps génériques que lorsque la forme est véritablement dynamique ou inconnue.
Articles associés
Qu'est-ce que JSON ? Le guide complet pour débutants →
JSON (JavaScript Object Notation) est un format d'échange de données léger, facile à lire pour les humains et à analyser pour les machines. Apprenez la syntaxe, les types de données et la structure qui font tourner les API modernes.
L'histoire de JSON : de 2000 au standard de l'industrie →
Suivez JSON depuis l'idée de Douglas Crockford en 2001, en passant par son adoption par Yahoo, jusqu'à devenir le standard ECMA-404 qui fait tourner 90 % des API modernes.
Le guide complet de JSON Schema (Draft 7) →
JSON Schema est le standard pour décrire et valider la structure JSON. Apprenez les mots-clés essentiels, construisez un véritable schéma d'API et appliquez les bonnes pratiques.