Json enconding and decoding for Matlab classes

16 Ansichten (letzte 30 Tage)
Adrián Lascurain
Adrián Lascurain am 7 Jun. 2023
Bearbeitet: Adrián Lascurain am 14 Jun. 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.

Akzeptierte Antwort

Lakshay Rose
Lakshay Rose am 14 Jun. 2023
Bearbeitet: Lakshay Rose am 14 Jun. 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 Kommentar
Adrián Lascurain
Adrián Lascurain am 14 Jun. 2023
Bearbeitet: Adrián Lascurain am 14 Jun. 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.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Programming finden Sie in Help Center und File Exchange

Produkte


Version

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by