чтение запись json с помощью jsonlite в R

#json #jsonlite

#json #jsonlite

Вопрос:

задача состоит в том, чтобы загрузить json, обработать некоторые данные и выполнить обратную запись. Первый шаг — это просто прочитать и записать файл json с одинаковыми исходящими и входными данными, но это не так. Вот тестовый файл, в котором излагается проблема:

 {  "hourly": [  {  "Temperatur": {  "Datum": ["2021-09-24 21:00:00", "2021-09-24 22:00:00"],  "Vorhersage": [14.82, 14.83],  "Referenz": [16.6, 16.2],  "DWD_Name": ["Elpersbüttel", "Elpersbüttel"],  "Export": [17.2, 16.71],  "color": ["rgb(0,128,0)", "rgb(0,128,0)"],  "Status": ["ok", "ok"],  "min": [13.05, 12.81],  "max": [17, 17]  }},  {  "Temperatur2": {  "Datum": ["2021-09-24 21:00:00", "2021-09-24 22:00:00"],  "Vorhersage": [13.82, 14.83],  "Referenz": [16.6, 16.2],  "DWD_Name": ["Elpersbüttel", "Elpersbüttel"],  "Export": [17.2, 16.71],  "color": ["rgb(0,128,0)", "rgb(0,128,0)"],  "Status": ["ok", "ok"],  "min": [13.05, 12.81],  "max": [17, 18]  }  }  ] }  

Однако jsonlite изменяет структуру данных:

 library(jsonlite) id = "test3" # my testfile setwd("/path/") myjs = fromJSON(paste0(id,".json"),simplifyVector = T)  write_json(myjs, paste0(id,"_.json"), pretty = T) # output file 'test3_.json'  

Вот результат, который я получаю:

 {  "hourly": [  {  "Temperatur": {  "Datum": ["2021-09-24 21:00:00", "2021-09-24 22:00:00"],  "Vorhersage": [14.82, 14.83],  "Referenz": [16.6, 16.2],  "DWD_Name": ["Elpersbüttel", "Elpersbüttel"],  "Export": [17.2, 16.71],  "color": ["rgb(0,128,0)", "rgb(0,128,0)"],  "Status": ["ok", "ok"],  "min": [13.05, 12.81],  "max": [17, 17]  },  "Temperatur2": {  "Datum": {},  "Vorhersage": {},  "Referenz": {},  "DWD_Name": {},  "Export": {},  "color": {},  "Status": {},  "min": {},  "max": {}  }  },  {  "Temperatur": {  "Datum": {},  "Vorhersage": {},  "Referenz": {},  "DWD_Name": {},  "Export": {},  "color": {},  "Status": {},  "min": {},  "max": {}  },  "Temperatur2": {  "Datum": ["2021-09-24 21:00:00", "2021-09-24 22:00:00"],  "Vorhersage": [13.82, 14.83],  "Referenz": [16.6, 16.2],  "DWD_Name": ["Elpersbüttel", "Elpersbüttel"],  "Export": [17.2, 16.71],  "color": ["rgb(0,128,0)", "rgb(0,128,0)"],  "Status": ["ok", "ok"],  "min": [13.05, 12.81],  "max": [17, 18]  }  }  ] }  

если simplifyVector = F, это приведет к вложенным массивам.

 {  "hourly": [  {  "Temperatur": {  "Datum": [  ["2021-09-24 21:00:00"],  ["2021-09-24 22:00:00"]  ],  "Vorhersage": [  [14.82],  [14.83]  ],  "Referenz": [  [16.6],  [16.2]  ],  "DWD_Name": [  ["Elpersbüttel"],  ["Elpersbüttel"]  ],  "Export": [  [17.2],  [16.71]  ],  "color": [  ["rgb(0,128,0)"],  ["rgb(0,128,0)"]  ],  "Status": [  ["ok"],  ["ok"]  ],  "min": [  [13.05],  [12.81]  ],  "max": [  [17],  [17]  ]  }  },  {  "Temperatur2": {  "Datum": [  ["2021-09-24 21:00:00"],  ["2021-09-24 22:00:00"]  ],  "Vorhersage": [  [13.82],  [14.83]  ],  "Referenz": [  [16.6],  [16.2]  ],  "DWD_Name": [  ["Elpersbüttel"],  ["Elpersbüttel"]  ],  "Export": [  [17.2],  [16.71]  ],  "color": [  ["rgb(0,128,0)"],  ["rgb(0,128,0)"]  ],  "Status": [  ["ok"],  ["ok"]  ],  "min": [  [13.05],  [12.81]  ],  "max": [  [17],  [18]  ]  }  }  ] }   

В обоих случаях основная проблема заключается в том, что FromJSON генерирует объект списка, который неправильно представляет структуру входных данных… или write_json (tojson) интерпретирует его неправильно. Обходным путем может быть использование simplifyVector = F, перезагрузка и последующее исправление массивов..

Ответ №1:

Этот вариант simplifyDataFrame = F решил проблему.