Matlab

Trabajar con datos en formato JSON en Matlab

JSON es un formato de texto ligero pensado para el intercambio de información entre aplicaciones. El origen de este se encuentra en la notación de objetos empleada en el lenguaje de programación JavaScript. Siendo su nombre el acrónimo de “JavaScript Object Notation” (Notación de Objeto de JavaScript). Por eso la mayoría de aplicaciones web publican los datos de las consultas utilizando JSON. Posiblemente debido a su popularidad en la versión R2016b de Matlab se introdujeron para la codificación y descodificación de este formato. En esta entrada se va a explicar cómo trabajar con archivos JSON en Matlab.

Las funciones incluidas en Matlab para el tratamiento de archivos JSON son dos jsondecode y jsonencode. La primera permite convertir una cadena de texto con datos en formato JSON a un objeto Matlab. Mientras la segunda realiza el proceso contrario, convierte los objetos Matlab en cadenas de texto con formato JSON. Actualmente no existe una función para importar directamente archivos JSON, aunque como estos son simples archivos de texto se pueden importar los datos con las funciones estándar. O desde la web con la función webread.

Importación y decodificación de los archivos

A modo de ejemplo se puede crear un archivo JSON en Mockaroo y descargarlo al disco duro. En nuestro caso se va a trabajar con el siguiente archivo.

[{
        "id": 1,
        "first_name": "Holden",
        "last_name": "Rodgier",
        "email": "hrodgier0@is.gd",
        "gender": "Male",
        "ip_address": "199.195.195.123",
        "total": "7.66"
    },
    {
        "id": 2,
        "first_name": "Lacey",
        "last_name": "Coddrington",
        "email": "lcoddrington1@berkeley.edu",
        "gender": "Female",
        "ip_address": "123.83.127.101",
        "total": "12.59"
    },
    {
        "id": 3,
        "first_name": "Leshia",
        "last_name": "Francescuccio",
        "email": "lfrancescuccio2@china.com.cn",
        "gender": "Female",
        "ip_address": "54.248.253.8",
        "total": "11.62"
    },
    {
        "id": 4,
        "first_name": "Charla",
        "last_name": "Peerman",
        "email": "cpeerman3@wired.com",
        "gender": "Female",
        "ip_address": "189.170.54.121",
        "total": "10.06"
    },
    {
        "id": 5,
        "first_name": "Antin",
        "last_name": "Petrashkov",
        "email": "apetrashkov4@icq.com",
        "gender": "Male",
        "ip_address": "103.219.106.206",
        "total": "20.28"
    }
]

En Matlab este archivo se puede importar utilizando la función fileread. Para ello solamente se ha de escribir:

json = fileread('MOCK_DATA.json');

Con lo que se obtiene una cadena de texto con el contenido del archivo. Ahora se puede utilizar la función jsondecode para decodificar el contenido del archivo

data = jsondecode(json);

En la variable data se puede encontrar un objeto struct con los datos ya accesibles.

data = 

  5×1 struct array with fields:

    id
    first_name
    last_name
    email
    gender
    ip_address
    total

Por ejemplo, el primer elemento del array será.

ans = 

  struct with fields:

            id: 1
    first_name: 'Holden'
     last_name: 'Rodgier'
         email: 'hrodgier0@is.gd'
        gender: 'Male'
    ip_address: '199.195.195.123'
         total: '7.66'

Codificación de los archivos JSON en MATLAB

La mayoría de los objetos Matlab se pueden convertir en una cadena de texto JSON mediante la función jsonencode. Uno de los objetos más fáciles de convertir es una vector.

json = jsonencode(1:5);

Este código asigna la siguiente cadena a la variable json.

'[1,2,3,4,5]'

JSON es un formato en el que se puede almacenar datos con una cierta estructura, lo que en Matlab son los objetos tipo struct. Así exportar una estructura es igual de fácil que un vector.

json = jsonencode(struct('data', 1:5));

Asignando a la variable json la cadena

'{"data":[1,2,3,4,5]}'

Valores infinitos y NaN

Al codificar datos en los que exista valores infinito o NaN sucede algo curioso, la información se pierde ya que almacena como un valor null. Esto es lo que se puede ver en el siguiente ejemplo.

jsonencode([1, NaN, inf])

ans =

    '[1,null,null]'

En caso de que se desee recuperar la información se tendrá el siguiente resultado

jsondecode(jsonencode([1, NaN, inf]))

ans =

     1
   NaN
   NaN

Para evitar este problema, si los datos se desean utilizar posteriormente en otra sesión de Matlab, se pude cambiar la opción 'ConvertInfAndNaN' de la función jsonencode a un valor igual a false. A modo de ejemplo se puede ver el resultado por defecto de

jsonencode([1, NaN, inf], 'ConvertInfAndNaN', true)

ans =

    '[1,null,null]'

Ahora se puede comprobar cómo toda la información en el vector original se puede recuperar.

jsondecode(jsonencode([1, NaN, inf], 'ConvertInfAndNaN', false))

ans =

     1
   NaN
   Inf

Es importante notar que la mayoría de las aplicaciones no pueden no comprender los valores NaN e infinito. Por los que es necesario tener cuidado a la hora de utilizar esta opción.

Conclusiones

En esta entrada se ha visto las funciones disponibles en Matlab para trabajar con cadenas de texto con JSON. La decodificación de cadenas de texto en objetos Matlab se realiza con jsondecode. Por otro lado, el proceso inverso se realiza mediante la función jsonencode.

A diferencia de lo visto con los archivos JSON en Python. En Matlab no existe una función que importe y realice la decodificación de archivos JSON, siendo necesario importar previamente los datos con alguna de las funciones disponibles. Lo mismo se aplica al proceso de exportación.

Imágenes: Pixabay (Gerd Altmann)

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez

Recent Posts

El bestiario de los indicadores económicos absurdos: El zoo patrio

Cualquier país desarrollado tiene sus propios indicadores folclóricos. España, por motivos que tienen mucho que…

16 horas ago

Por qué el banco te ofrece un 3% TAE y no es lo que parece

Entras a la web de tu banco. En la página principal, un banner llamativo: “Depósito…

3 días ago

Analytics Lane lanza la versión 1.3 del laboratorio con nuevas herramientas de evaluación de modelos y utilidades prácticas

Seguimos ampliando el laboratorio de Analytics Lane con el lanzamiento de la versión 1.3, disponible…

7 días ago

Augurios deportivos y portadas malditas, o cuando The Economist predice mejor al revés – El bestiario de los indicadores económicos absurdos (parte 3)

Cerramos la serie internacional con la categoría más estrambótica de todas: indicadores que predicen el…

1 semana ago

El Binning en Credit Scoring: El Arte de Discretizar Variables

Si el WOE y el IV son la base matemática del credit scoring, el binning…

1 semana ago

Analytics Lane lanza la versión 1.2 del laboratorio con nuevas herramientas de ajuste de curvas y cálculo matricial

Seguimos iterando sobre el laboratorio de Analytics Lane y lanzamos la versión 1.2, disponible en:https://www.analyticslane.com/lab/es…

2 semanas ago

This website uses cookies.