JSON es un estándar de intercambio de datos ligero y legible por humanos.

JSON (JavaScript Object Notation) utiliza una estructura de pares clave-valor para representar información de manera independiente del lenguaje de programación. Esto permite almacenar, leer, enviar y recibir datos, independientemente del software, protocolo, o lenguaje de programación que uses.

¿Por qué elegir JSON?

Por supuesto, existen otros estándares que permiten hacer una, algunas, todas o más funciones que JSON (entre ellos XML, YAML, protobuf, etc.), pero los motivos para elegir JSON son:

  • Legibilidad: JSON utiliza una sintaxis legible por humanos. Es fácil de leer y escribir
  • Fácil de usar: Todos los lenguajes de programación disponen de una librería para parsear JSON.
  • Adopción: La mayoría de APIs que vayas a consumir, responderán en JSON.

Sintaxis de JSON

Habitualmente, te encontrarás con JSON con el siguiente formato, representando, por ejemplo, una persona:

{
  "name": "Alex",
  "surname": "Walker",
  "age": 30,
  "height": 1.8,
  "lovesPasta": true,
  "interests": ["sport", "cook", "films"]
}

Pero también puedes encontrarte a un conjunto de personas (eliminaré campos del JSON para simplificar):

[
  {
    "name": "Alex",
    "age": 30
  },
  {
    "name": "John",
    "age": 27
  },
  {
    "name": "Sophia",
    "age": 32
  }
]

Un error común: recuerda que el último campo del objeto { ... } y del array [ ... ], no llevan coma.

Ejemplos con código

A continuación, algunos ejemplos de cómo leer un JSON con los lenguajes más comunes. Los datos se podrían obtener de una llamada a una API, o leyendo un fichero .json. Dependiendo del lenguaje, y la situación, haremos un manejo de errores distinto, pero estos son ejemplos muy sencillos.

Golang

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    jsonData := `{
        "name": "Alex",
        "surname": "Walker",
        "age": 30,
        "height": 1.8,
        "lovesPasta": true,
        "interests": ["sport", "cook", "films"]
    }`

    type Person struct {
        Name       string    `json:"name"`
        Surname    string    `json:"surname"`
        Age        int       `json:"age"`
        Height     float64   `json:"height"`
        LovesPasta bool      `json:"lovesPasta"`
        Interests  []string  `json:"interests"`
    }

    var person Person
    if err := json.Unmarshal([]byte(jsonData), &person); err != nil {
        fmt.Println(err)
        return
    }

    fmt.Printf("Name: %s\nSurname: %s\nAge: %d\nHeight: %.2f\nLoves Pasta: %v\nInterests: %v\n", person.Name, person.Surname, person.Age, person.Height, person.LovesPasta, person.Interests)
}

JavaScript

var jsonData = 
    `{
        "name": "Alex",
        "surname": "Walker",
        "age": 30,
        "height": 1.8,
        "lovesPasta": true,
        "interests": ["sport", "cook", "films"]
    }`;

var person = JSON.parse(jsonData);

console.log("Name: " + person.name);
console.log("Surname: " + person.surname);
console.log("Age: " + person.age);
console.log("Height: " + person.height);
console.log("Loves Pasta: " + (person.lovesPasta ? "Yes" : "No"));
console.log("Interests: " + person.interests.join(", "));

PHP

<?php
$jsonData = '{
    "name": "Alex",
    "surname": "Walker",
    "age": 30,
    "height": 1.8,
    "lovesPasta": true,
    "interests": ["sport", "cook", "films"]
}';

$person = json_decode($jsonData, true);
if ($person === null) {
    echo "Error al decodificar el JSON\n";
} else {
    echo "Name: " . $person["name"] . "\n";
    echo "Surname: " . $person["surname"] . "\n";
    echo "Age: " . $person["age"] . "\n";
    echo "Height: " . $person["height"] . "\n";
    echo "Loves Pasta: " . ($person["lovesPasta"] ? "Yes" : "No") . "\n";
    echo "Interests: " . implode(", ", $person["interests"]) . "\n";
}
?>

Python

import json

jsonData = '''
{
    "name": "Alex",
    "surname": "Walker",
    "age": 30,
    "height": 1.8,
    "lovesPasta": true,
    "interests": ["sport", "cook", "films"]
}
'''

person = json.loads(jsonData)

print("Name:", person["name"])
print("Surname:", person["surname"])
print("Age:", person["age"])
print("Height:", person["height"])
print("Loves Pasta:", "Yes" if person["lovesPasta"] else "No")
print("Interests:", ", ".join(person["interests"]))