Insertar un archivo JSON en una base de datos utilizando PHP

Cómo insertar un archivo JSON en una base de datos utilizando PHP

En este artículo en primer lugar voy a hacer una breve introducción sobre JSON y luego explicar cómo insertar un archivo JSON en una base de datos utilizando PHP y luego hacer el proceso a la inversa; es decir, recuperar nuevamente los datos de la base de datos y almacenarlos en un archivo JSON usando PHP. Vamos a empezar con la introducción a JSON:

JSON

JSON básicamente significa JavaScript Object Notation. JSON es bastante simple, fácil y ligero y sirve para el intercambio y almacenamiento de datos desde y hacia la base de datos. Es una alternativa al conocido XML (Extensible Markup Language). Los datos en formato JSON se almacenan en el archivo JSON con la extensión  “.json”. Los datos presentes en el archivo JSON son compatibles con todos los navegadores modernos actuales.

Sintaxis JSON

A continuación mostramos la sintaxis JSON:

Listado 1 . studJson.json

{
    "StdID": "0106",
    "StdData": {
        "StdName": "Mirwaise",
        "StdAge": "23",
        "StdGender": "Male",
        "StdNo": "12345",
        "StdAddress": {
            "StdStreet": "786 Street",
            "StdCity": "Riad",
            "StdCountry": "Arabia Saudita",
            "StdPostal": "98765"
        }
    },
    "STDEDU": {
        "StdDept": "Computer Science",
        "StdSemester": "8",
        "StdMajor": "Programación Web"
    }
} 

El código JSON anterior se utilizará como base para el resto de este artículo. El siguiente paso es mostrar cómo insertar un archivo JSON en una base de datos utilizando PHP. Para este ejemplo voy a usar una base de datos MySQL.

Insertar un archivo JSON en una base de datos utilizando PHP

Para insertar un archivo JSON en una base de datos utilizando PHP se necesitan algunos pasos con el fin de hacer más fácil esta tarea.

Paso 1: Creación de base de datos y conexión de base de datos (MySQL) con PHP

En primer lugar crearemos una base de datos (“jsondb” en mi caso) y en la misma crearemos una tabla llamada (“stdtable”). El número de columnas no debe ser inferior a los campos requeridos en el archivo JSON. En mi caso, he creado una tabla con los campos necesarios, como se muestra a continuación:

insertar un archivo JSON en una base de datos utilizando PHP

Figura 1 . Tabla stdtable junto con las columnas.

Una vez que hayas creado la tabla base con los campos necesarios, el siguiente paso es conectarse a la base de datos desde el archivo PHP. Para ello, vamos a crear un archivo PHP con los siguientes datos:

Listado 2 .jsonCon.php

<?php 
//connect and select the database 
$connect = mysql_connect("localhost","root","") or die('Database Not Connected. Please Fix the Issue! ' . mysql_error());
mysql_select_db("jsondb", $connect);
// get the contents of the JSON file $jsonCont = file_get_contents('studJson.json');
//decode JSON data to PHP array $content = json_decode($jsonCont, true);
//Fetch the details of Student $std_id = $content['stdID'];
$std_name = $content['stdData']['stdName'];
$std_age = $content['stdData']['stdAge'];
$std_gender = $content['stdData']['stdGender'];
$std_no = $content['stdData']['stdNo'];
$std_street = $content['stdData']['stdAddress']['stdStreet'];
$std_city = $content['stdData']['stdAddress']['stdCity'];
$std_country = $content['stdData']['stdAddress']['stdCountry'];
$std_postal = $content['stdData']['stdAddress']['stdPostal'];
$std_dept = $content['stdEdu']['stdDept'];
$std_sem = $content['stdEdu']['stdSemester'];
$std_major = $content['stdEdu']['stdMajor'];
//Insert the fetched Data into Database 
$query = "INSERT INTO stdtable(std_id, std_name, std_age, std_gender, std_num, std_street, std_city, std_country, std_postal, std_dept, std_semstr, std_major) VALUES('$std_id', '$std_name', '$std_age', '$std_gender', '$std_no', '$std_street', '$std_city', '$std_country', '$std_postal', '$std_dept', '$std_sem', '$std_major')";
if(!mysql_query($query,$connect)) { 
 die('Error : Query Not Executed. Please Fix the Issue! ' . mysql_error());
} else{ 
 echo "Data Inserted Successully!!!";
} 
?>

En el código anterior, lo primero que hacemos es establecer una conexión de base de datos mediante la función PHP “ mysql_connect () ”. A continuación, después de la conexión, seleccionamos la base de datos usando la función de PHP “ mysql_select_db () ”.

Paso 2: Obtener el contenido del archivo JSON

Ahora, para obtener el contenido del archivo JSON, utilizamos la función de PHP “ file_get_contents () ”. Esta función lee el contenido del archivo dado en una cadena. En el código anterior, el “ studJson.json ” representa el archivo JSON cuyos datos se van a leer.

Paso 3: decodificar datos JSON hacia una matriz asociativa en PHP

Una vez que se lee y está disponible en forma de cadena los datos del archivo JSON, entonces se convierten los datos JSON en una matriz (o arreglo). Para ello, utilizamos la función PHP “ json_decode () ”. Esta función convierte los datos presentes en formato en una matriz asociativa en PHP. En el código anterior, guardamos en la variable “ $jsonCont” los contenidos de la cadena del archivo JSON.

Paso 4: Obtener los valores decodificados

El siguiente paso es buscar los valores decodificados y almacenarlos en las variables de PHP. Esto se puede hacer buscando uno por uno los valores y almacenándolos en las diferentes variables.

Paso 5: Insertar los datos obtenidos en la base de datos

Por último, los datos JSON se insertan en la base de datos mediante una instrucción de MySQL. Es importante tener en cuenta que los nombres de las columnas de la tabla en la base de datos deben ser escritos correctamente, de otra manera no se insertarán los datos en la base de datos.

Al ejecutar el código anterior obtendrás el siguiente resultado:

Insertar archivo JSON en base de datos

La Figura 2 . Inserción del archivo JSON en una base de datos.

Actualiza tu base de datos y verás que los datos se insertaron correctamente. La salida de la base de datos será la siguiente:

Figura 3 . Resultado de los datos insertados en la base de datos.

Se puede ver en la imagen anterior que los datos se insertan adecuadamente en las columnas correspondientes. Si deseas añadir más datos en las columnas de la tabla, cambia los datos en el archivo JSON o agrega otro archivo JSON con otro nombre y ejecuta el código de nuevo. Vamos a insertar otro archivo JSON. Simplemente añadimos otro archivo JSON ( studJson2.json ) en la función file_get_contents( ‘studJson2.json’). Los datos que utilizaremos en “ studJson2.json” son los siguientes:

Listado 3 . studJson2.json

{
    "StdID": "0110",
    "StdData": {
        "StdName": "Nisar",
        "StdAge": "25",
        "StdGender": "Male",
        "StdNo": "78600",
        "StdAddress": {
            "StdStreet": "123 Street",
            "StdCity": "Swat",
            "StdCountry": "Canadá",
            "StdPostal": "55511"
        }
    },
    "STDEDU": {
        "StdDept": "Ingeniería Informática",
        "StdSemester": "7",
        "StdMajor": "Ingeniería de Software"
    }
} 

Ejecuta de nuevo y ahora obtendrás una salida de la siguiente manera:

El siguiente paso es a la inversa de lo anterior; es decir, recuperar los datos de la base de datos y almacenarlos en el archivo JSON a través de PHP.

Recuperar los datos de la base de datos y almacenarlos en un archivo JSON a través de PHP

En esta parte, vamos a extraer los datos que se almacenaron en la base de datos y mostrarlos en un archivo con formato JSON. Este proceso es uno de los más utilizados por los desarrolladores web hoy en día. Para comenzar, debes tener una base de datos como explicamos anteriormente. Este proceso también necesita algunos pasos a tener en cuenta. Vamos a empezar con la explicación de cada paso:

Paso 1: Conexión a la base de datos con PHP

Vamos a utilizar la misma base de datos y la misma conexión de base de datos como hicimos anteriormente:

Listado 4 .jsonRev.php

<?php
    // Paso No. 1: Conectar base de datos con PHP
    $connect = mysql_connect("localhost","root","") or die('Database Not Connected. Please Fix the Issue! ' . mysql_error());
    mysql_select_db("jsondb", $connect);
?>

Paso 2: Conexión a la base de datos

Una vez establecida la conexión, entonces hay que extraer los datos presentes en la tabla de base de datos. Para esto, utilizaremos la función “mysql_query()”:

Listado 5. jsonRev.php

<?php 
 //Step No. 2: Extracting data from database 
 $query = "SELECT * FROM stdtable"; 
 $res = mysql_query($query,$connect) or die("Query Not Executed " . mysql_error($connect)); 
?>

Paso 3: Extraer los datos de la base de datos

Ahora debemos guardar los datos en un arreglo en PHP. Para ello, creamos una variable y asignamos una matriz vacía a esa variable. Esta matriz vacía se utilizará para obtener los registros obtenidos como resultado de la consulta MySQL. En PHP utilizaremos la función “mysql_fetch_assoc()” para este propósito.

Listado 6. jsonRev.php

<?php 
 //Step No. 3: Putting the fetched data in Arrays 
 $data_array = array();
 while($rows =mysql_fetch_assoc($res)) { 
 $data_array[] = $rows;
 }
?>

Paso 4: Guardar datos en matriz asociativa

Una vez que tengas los datos en una matriz, entonces debemos codificarlo en formato JSON. Para ello, se utiliza la función de PHP “json_encode()”. Esta función toma la matriz como un argumento y devuelve los datos de la matriz en cadenas de JSON.

Paso 5: Escribir los datos en un archivo JSON

Finalmente, después de tener los datos en formato JSON, hay que escribir los mismos en un archivo JSON. Para ello, utilizaremos la función “fopen()” para abrir el archivo y a continuación, la función “fwrite()”, la cual toma dos argumentos; una con el archivo devuelto por “fopen” y el segundo argumento para la codificación de los datos presentes en la base de datos.

Listado 7. jsonRev.php

<?php
//Step No. 4 and 5: Encoding Array into JSON + Writing data to JSON file
$fp = fopen('studRecords.json', 'w');
//fwrite($fp, json_encode($data_array));

if(!fwrite($fp, json_encode($data_array))) {
 die('Error : File Not Opened. ' . mysql_error());
} else{
 echo "Data Retrieved Successully!!!";
}

fclose($fp);
?>

Aquí está el código completo:

Listado 8. jsonRev.php

<?php
//Step No. 1: Connect database with PHP
$connect = mysql_connect("localhost","root","") or die('Database Not Connected. Please Fix the Issue! ' . mysql_error());
mysql_select_db("jsondb", $connect);

//Step No. 2: Extracting data from database $query = "SELECT * FROM stdtable";
$res = mysql_query($query,$connect) or die("Query Not Executed " . mysql_error($connect));

//Step No. 3: Putting the fetched data in Arrays $data_array = array();
while($rows =mysql_fetch_assoc($res)) {
 $data_array[] = $rows;
}

//Step No. 4 and 5: Encoding Array into JSON + Writing data to JSON file $fp = fopen('studRecords.json', 'w');
//fwrite($fp, json_encode($data_array));
if(!fwrite($fp, json_encode($data_array))) {
 die('Error : File Not Opened. ' . mysql_error());
} else{
 echo "Data Retrieved Successully!!!";
}
fclose($fp);

mysql_close($connect);
?>
 

La salida para el código anterior será como sigue:

Después de ejecutar el código anterior, se verá que el archivo “ studRecords.json ” se creará automáticamente si no había sido creado previamente, y contendrá los datos recuperados de la base de datos en formato JSON.

Conclusión

El formato JSON juega un papel de vital importancia en el desarrollo web actual. En estos días JSON tomó el lugar que en algún momento ocupó XML. En este artículo vimos cómo insertar un archivo JSON en una base de datos utilizando PHP. Para ello, en primer lugar, vimos una breve descripción del formato JSON. A continuación, las diferentes etapas para insertar los datos JSON a una base de datos. Por último, hicimos el proceso a la inversa; es decir, recuperamos de datos de la base de datos y los guardamos en un archivo JSON.

Enlaces de interés

Quiero aprender AngularJS

Cómo hacer una barra de progreso usando jQuery

jQuery – Comprueba si un elemento tiene un Class específico

Aprender a programar gratis

2 thoughts on “Insertar un archivo JSON en una base de datos utilizando PHP”

  1. 1. Please use the mysqli connector rather than the deprecated mysql connector.
    2. MySQL has a native JSON data type as of version 5.7

    1. Hello Dave,

      Thank you very much for your comment. You’re right this example could be updated according to your recommendation. We will keep it in mind for future posts.

      Regards,

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *