У меня есть кадр данных R в моем проекте, который я хотел бы преобразовать в формат json.R кадр данных в пользовательский формат json
Мой фрейм данных "df_sales":
df_sales
2 4 5 7 8 9 10 11 12
2004 40400 0 226100 238556.4 217044.8 2243085.4 118754.50 193740 181075
2005 0 0 0 0.0 60000.0 0.0 0.00 0 0
2006 0 0 0 0.0 0.0 0.0 4.75 0 0
2007 0 8100 0 162400.0 1500.0 181860.9 450.00 0 73100
2008 0 0 0 0.0 10000.0 1000.0 0.00 0 0
И мой dput выход из моих df_sales данных кадра:
dput(df_sales)
structure(list(`2` = c(40400, 0, 0, 0, 0), `4` = c(0, 0, 0, 8100,
0), `5` = c(226100, 0, 0, 0, 0), `7` = c(238556.35, 0, 0, 162400,
0), `8` = c(217044.75, 60000, 0, 1500, 10000), `9` = c(2243085.4,
0, 0, 181860.85, 1000), `10` = c(118754.5, 0, 4.75, 450, 0),
`11` = c(193740, 0, 0, 0, 0), `12` = c(181075, 0, 0, 73100,
0)), .Names = c("2", "4", "5", "7", "8", "9", "10", "11",
"12"), row.names = c("2004", "2005", "2006", "2007", "2008"), class = "data.frame")
Я хотел бы преобразовать мой кадр df_sales данных обряду json format:
{
"series":[
{
"year":"2004",
"month":{
"2":40400,
"4":0,
"5":226100,
"7":238556.35,
"8":217044.75,
"9":2243085.4,
"10":118754.5,
"11":193740,
"12":181075
}
},
{
"year":"2005",
"month":{
"2":0,
"4":0,
"5":0,
"7":0,
"8":60000,
"9":0,
"10":0,
"11":0,
"12":0
}
},
{
"year":"2006",
"month":{
"2":0,
"4":0,
"5":0,
"7":0,
"8":0,
"9":0,
"10":4.75,
"11":0,
"12":0
}
},
{
"year":"2007",
"month":{
"2":0,
"4":8100,
"5":0,
"7":162400,
"8":1500,
"9":181860.85,
"10":450,
"11":0,
"12":73100
}
},
{
"year":"2008",
"month":{
"2":0,
"4":0,
"5":0,
"7":0,
"8":10000,
"9":1000,
"10":0,
"11":0,
"12":0
}
}
]
}
Я использую jsonlite package и rjson для преобразования моих «df_sales», но я не могу получить эту структуру с этими пакетами.
Я попытался с помощью R применить(), lapply() и sapply() функции, чтобы получить мой собственный JSON:
toJSON(list(series=list(df_sales),MARGIN=1,FUN=function(r){
sapply(r,FUN=function(i){list(i)})
}))), pretty = TRUE, auto_unbox = TRUE)
, но я просто получить этот результат:
{
"series": [
{
"2004": {
"2": 40400,
"4": 0,
"5": 226100,
"7": 238556.35,
"8": 217044.75,
"9": 2243085.4,
"10": 118754.5,
"11": 193740,
"12": 181075
},
"2005": {
"2": 0,
"4": 0,
"5": 0,
"7": 0,
"8": 60000,
"9": 0,
"10": 0,
"11": 0,
"12": 0
},
"2006": {
"2": 0,
"4": 0,
"5": 0,
"7": 0,
"8": 0,
"9": 0,
"10": 4.75,
"11": 0,
"12": 0
},
"2007": {
"2": 0,
"4": 8100,
"5": 0,
"7": 162400,
"8": 1500,
"9": 181860.85,
"10": 450,
"11": 0,
"12": 73100
},
"2008": {
"2": 0,
"4": 0,
"5": 0,
"7": 0,
"8": 10000,
"9": 1000,
"10": 0,
"11": 0,
"12": 0
}
}
]
}
ли вы, есть какие-либо советы или любое другое решение?
спасибо.
Если вы можете дать выход 'dput' на фоторамке данных это сэкономит нам приходится реконструировать его, мы можем просто вставить' dput' выход в. – Spacedman
Я уверен, что ваш желаемый результат ISN Действительный JSON. У вас есть некоторые опечатки (отсутствует «' 'в конце каждого года), но более серьезно у вас есть повторяющиеся ключи,' 'year '' и '' month "' оба повторяются как имена ключей, а это не разрешено. Выход, который вы получаете *, является * действительным JSON, но я думаю, что у вас будет немного грубого времени, модифицирующего 'jsonlite', чтобы создать незаконный результат, как вы хотите. – Gregor
Спасибо, я пропустил свою копию/вставку. просто изменил пользовательский формат json в моем сообщении. – aborderon