scrittura file json con ciclo for

4 visualizzazioni (ultimi 30 giorni)
Davide Serina
Davide Serina il 8 Dic 2022
Risposto: Paras Gupta il 31 Ago 2023
ciao, io dovrei scrivere un file json su matlab partendo da una tabella, già convertita in struttura. il problema è che non riesco ad annidare gli elementi della tabella in modo corretto. nella tabella io ho le seguenti colonne: (id_ospedale, codice_nosologico, sesso, eta, diagnosi_principale, diagnois_concomitante1, diagnois_concomitante2, diagnois_concomitante3, DRG_calcolato). Dovrei usare un ciclo for per annidare le diagnois concomitanti e poi aggiungere il "contenitore": 'diagnosi_concomitanti', ma non saprei come strutturarlo. di seguito vi metto come dovrebbe uscire. se qualcuno sa aiutarmi mi farebbe un grande favore. grazie
{
"id_ospedale":"1",
"dati pratiche": [
{
"codice_nosologico": "135533",
"sesso": "F",
"eta": "28",
"diagnosi_principale": "436",
"diagnosi_concomitanti": [
{
"diagnosi_concomitante1":"80701"
},
{
"diagnosi_concomitante2": "40701"
},
{
"diagnois_concomitante3": "70701"
}
],
"DRG_calcolato"
},
{......
}
]
}

Risposte (1)

Paras Gupta
Paras Gupta il 31 Ago 2023
Hi Davide,
I understand that you want to structure the data from a table into a ‘. JSON file with the provided format. Please refer the following code to achieve the same.
T = readtable('table.xlsx');
T = T(1, :);
% Convert table to structure
table = table2struct(T);
% Get unique hospital IDs from the table
unique_hospital_ids = unique([table.id_ospedale]);
data = struct();
data.practice_data = [];
for i = 1:numel(unique_hospital_ids)
hospital_id = unique_hospital_ids(i);
index = find([table.id_ospedale] == hospital_id);
hospital = struct();
hospital.id_ospedale = num2str(hospital_id);
hospital.dati_pratiche = [];
for j = 1:numel(index)
practice = struct();
practice.codice_nosologico = num2str(table(index(j)).codice_nosologico);
practice.sesso = num2str(table(index(j)).sesso);
practice.eta = num2str(table(index(j)).eta);
practice.diagnosi_principale = num2str(table(index(j)).diagnosi_principale);
% Cell Array
concurrent_diagnoses = {};
diagnosis = struct();
diagnosis.diagnois_concomitante1 = num2str(table(index(j)).diagnois_concomitante1);
concurrent_diagnoses{end+1} = diagnosis;
diagnosis = struct();
diagnosis.diagnois_concomitante2 = num2str(table(index(j)).diagnois_concomitante2);
concurrent_diagnoses{end+1} = diagnosis;
diagnosis = struct();
diagnosis.diagnois_concomitante3 = num2str(table(index(j)).diagnois_concomitante3);
concurrent_diagnoses{end+1} = diagnosis;
practice.diagnosi_concomitanti = concurrent_diagnoses;
practice.DRG_calcolato = num2str(table(index(j)).DRG_calcolato);
hospital.dati_pratiche = [hospital.dati_pratiche, practice];
end
data.practice_data = [data.practice_data, hospital];
end
jsonStr = jsonencode(data);
fid = fopen('output.json', 'w');
if fid == -1
error('Cannot create JSON file');
end
fwrite(fid, jsonStr, 'char');
fclose(fid);
The code above reads dummy data from the attached “.xlsx” sheet. The imported table is converted into a structure and is then organized in the provided format using structs and cell arrays in MATLAB. The data is finally written onto a “.JSON” file.
You can refer to the following documentations for more information on the functions used in the code:
Hope this helps.

Community Treasure Hunt

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

Start Hunting!