У меня есть длинный список JSON строк, которые я пытаюсь импортировать и преобразовать во фреймы данных. Как правило, jsonlite::fromJSON
работает должным образом, но около 25% моих JSON выдают ошибку:
Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, : arguments imply differing number of rows: 1, 47, 2
Я понимаю, что это из-за разных уровней в JSON, но, похоже, он работает без проблем для остальных 75% моих данных, которые имеют аналогичную структуру.
Вот пример, чтобы проиллюстрировать, когда он работает, а когда нет.
Не работает правильно
x1 <- '{\"productCode\":\"DP1.00096.001\",\"sites\":[\"ABBY\",\"BARR\",\"BART\",\"BLAN\",\"BONA\",\"CLBJ\",\"CPER\",\"DCFS\",\"DEJU\",\"DELA\",\"DSNY\",\"GRSM\",\"GUAN\",\"HARV\",\"HEAL\",\"JERC\",\"JORN\",\"KONA\",\"KONZ\",\"LAJA\",\"LENO\",\"MLBS\",\"MOAB\",\"NIWO\",\"NOGP\",\"OAES\",\"ONAQ\",\"ORNL\",\"OSBS\",\"PUUM\",\"RMNP\",\"SCBI\",\"SERC\",\"SJER\",\"SOAP\",\"SRER\",\"STEI\",\"STER\",\"TALL\",\"TEAK\",\"TOOL\",\"TREE\",\"UKFS\",\"UNDE\",\"WOOD\",\"WREF\",\"YELL\"],\"dateRange\":[\"2012-06\",\"2018-07\"],\"documentation\":\"include\",\"packageType\":\"basic\"}'
output1 <- jsonlite::fromJSON(x1)
str(output1)
as.data.frame(output1)
Работает правильно
x2 <- '{\"productCode\":\"DP1.00095.001\",\"sites\":[\"ABBY\",\"BARR\",\"BART\",\"BLAN\",\"BONA\",\"CLBJ\",\"CPER\",\"DCFS\",\"DEJU\",\"DELA\",\"DSNY\",\"GRSM\",\"GUAN\",\"HARV\",\"HEAL\",\"JERC\",\"JORN\",\"KONA\",\"KONZ\",\"LAJA\",\"LENO\",\"MLBS\",\"MOAB\",\"NIWO\",\"NOGP\",\"OAES\",\"ONAQ\",\"ORNL\",\"OSBS\",\"RMNP\",\"SCBI\",\"SERC\",\"SJER\",\"SOAP\",\"SRER\",\"STEI\",\"STER\",\"TALL\",\"TEAK\",\"TOOL\",\"TREE\",\"UKFS\",\"UNDE\",\"WOOD\",\"WREF\",\"YELL\"],\"dateRange\":[\"2019-01\",\"2019-12\"],\"documentation\":\"include\",\"packageType\":\"basic\"}'
output2 <- jsonlite::fromJSON(x2)
str(output2)
as.data.frame(output2)
В обоих примерах JSON имеет несбалансированную структуру. Разница в том, что в x2
JSON может преобразовывать в data.frame, а в x1
вывод JSON - нет. Я не могу найти разницы ни в выводе str
, ни в фактической строке JSON, чтобы понять, где и почему он не работает. Структура идентична, и я бы не ожидал, что эта операция потерпит неудачу.
Любая помощь, проливающая свет на то, почему x1
не работает, а x2
работает, будет оценена. Есть ли способ получить x1
в рабочий фрейм данных, аналогичный выводу x2
?