#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
решил проблему.