Importare dati da un file JSON in un database MySQL con Bash

L'importazione di dati da un file JSON in un database MySQL può essere realizzata in vari modi, ma l'uso di uno script Bash rappresenta una soluzione efficace e automatizzabile. In questo articolo, descriveremo i passaggi necessari per completare questa operazione utilizzando strumenti di base come jq e mysql.

Prerequisiti

Prima di iniziare, assicurati di avere installati i seguenti strumenti:

  • MySQL: il database di destinazione.
  • jq: un tool di manipolazione JSON da riga di comando.
  • Bash: la shell di comando.

Preparazione del file JSON

Supponiamo di avere un file JSON denominato data.json contenente i dati che vogliamo importare. Ecco un esempio di come potrebbe apparire:


[
    {
        "id": 1,
        "name": "Alice",
        "email": "alice@example.com"
    },
    {
        "id": 2,
        "name": "Bob",
        "email": "bob@example.com"
    }
]

Creazione della tabella MySQL

Prima di importare i dati, dobbiamo creare una tabella nel database MySQL che corrisponda alla struttura del JSON. Per esempio:


CREATE DATABASE IF NOT EXISTS mydatabase;
USE mydatabase;

CREATE TABLE IF NOT EXISTS users (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
);

Puoi eseguire questo comando direttamente nella console MySQL o tramite un client come mysql:


mysql -u yourusername -p -e "source create_table.sql"

Scrivere lo script Bash


#!/bin/bash

# Configurazione delle credenziali MySQL
MYSQL_USER="yourusername"
MYSQL_PASSWORD="yourpassword"
MYSQL_DATABASE="mydatabase"
MYSQL_TABLE="users"

# Verifica della presenza del file JSON
if [[ ! -f "data.json" ]]; then
    echo "File data.json non trovato!"
    exit 1
fi

# Funzione per importare dati JSON in MySQL
import_json_to_mysql() {
    local id=$1
    local name=$2
    local email=$3

    local query="INSERT INTO ${MYSQL_TABLE} (id, name, email) VALUES (${id}, '${name}', '${email}');"
    mysql -u "${MYSQL_USER}" -p"${MYSQL_PASSWORD}" "${MYSQL_DATABASE}" -e "${query}"
}

# Leggere e importare i dati dal JSON
cat data.json | jq -c '.[]' | while read -r row; do
    id=$(echo "${row}" | jq -r '.id')
    name=$(echo "${row}" | jq -r '.name')
    email=$(echo "${row}" | jq -r '.email')

    import_json_to_mysql "${id}" "${name}" "${email}"
done

echo "Importazione completata!"

Dettagli dello script

  1. Configurazione delle Credenziali MySQL: Le variabili MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, e MYSQL_TABLE sono impostate per contenere le informazioni di connessione e il nome della tabella di destinazione.

  2. Verifica del File JSON: Lo script controlla se data.json esiste nella directory corrente.

  3. Funzione di Importazione: La funzione import_json_to_mysql prende i dati e li inserisce nella tabella MySQL eseguendo una query di inserimento.

  4. Lettura del File JSON: jq -c '.[]' legge il file JSON ed estrae ogni oggetto come una riga separata.

  5. Estrazione dei Campi: Per ogni riga, jq -r estrae i valori dei campi id, name, e email.

  6. Importazione dei Dati: I dati estratti vengono passati alla funzione di importazione, che esegue la query di inserimento nel database.

Conclusione

Questo metodo fornisce un modo semplice e automatizzato per importare dati da un file JSON in un database MySQL utilizzando uno script Bash. Con l'uso di jq per la manipolazione JSON e mysql per l'interazione con il database, puoi gestire facilmente il processo di importazione dei dati.

Torna su