Json enconding and decoding for Matlab classes

16 visualizaciones (últimos 30 días)
Adrián Lascurain
Adrián Lascurain el 7 de Jun. de 2023
Editada: Adrián Lascurain el 14 de Jun. de 2023
Hello , I'm currently defining a new class and I would like to encrypt (using AES) my object and all the information it contains, for this I used the jsonencode Matlab instruction for creating a character vector that is able to be encrypted, this already worked but when I decrypt the object and try to reconstruct it as my original object using Jsondecode it becomes an structure and not the class type that was defined.
So I would like to know if is there someway (method or instruction) to decode this into my original class type or shall I reconstruct the object using the data contained in the structure?
Thanks in advanced.

Respuesta aceptada

Lakshay Rose
Lakshay Rose el 14 de Jun. de 2023
Editada: Lakshay Rose el 14 de Jun. de 2023
Hi Adrián Lascurain,
As per my understanding you are trying to encode an object using “jsonencode” and then decode it using “jsondecode” and are getting the return output as a structure.
“jsonencode” function in MATLAB comes with the limitation that when objects are encoded, they don’t preserve their original structure.
To solve this problem there is a workaround of creating your own function which converts your decoded structure back to the object of your desired class.
You can refer to the below documentation to learn more about usage and limitations of “jsonencode” and “jsondecode” functions in MATLAB –
  1 comentario
Adrián Lascurain
Adrián Lascurain el 14 de Jun. de 2023
Editada: Adrián Lascurain el 14 de Jun. de 2023
Thank you so much Rose, I'm gonna try creating this function and compare it with another that I already found, this a way to preserve the object original structure (methods and properties) and I will let the solution here in the case that someone want to implement something similar.
Matlab has 2 build in functions (undocumented) that can help with this problem
  • getByteStreamFromArray(object) - This convert all the object into an uint8 row vector (this can be encrypted easily)
  • getArrayFromByteStream(RowVector) - This converts the resulting uint8 row vector into the original object
I've made some tests and it seems to work but the resulting vector is larger than the one you get using jsonencode so in my case it increases time for encrypting the data.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Programming en Help Center y File Exchange.

Productos


Versión

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by