在 R 中创建一对多嵌套 JSON 对象
Create one to many nested JSON object in R
我有一些数据如下所示:
flyFrom flyTo price
1 AAE ALG 48
2 AAE ORN 84
3 AAE MRS 158
4 AAE LYS 186
5 AAE ORY 198
6 AAE IST 374
...
我想把它改造成这样的东西:
{"AAE": [
"ALG", 48,
"ORN", 84,
"MRS", 158,
"LYS", 186,
"ORY", 198,
"IST", 374
...
],
"YYE": [
"YXY", 48,
"YDQ", 78,
"YXJ", 200
]}
我花了大约一个小时尝试不同的东西,但我不确定如何将它放入我想要的结构中。我现在正在使用 jsonlite,但我可以使用你推荐的任何东西
编辑:我希望价格列也包括在内,但我也不确定最简洁的实现是什么。 flyTo 和 price 之间的关系永远是 1:1
edit2:我能把它拉出来,但还不够
> test<-head(price,10)[c(1,2,3)]
> test2<-list(test$flyFrom,list(test$flyTo,test$price))
> jsonlite::toJSON(test2, pretty = TRUE,auto_unbox = TRUE)
[
["BUF", "CAK", "JAN", "PHF", "CAE", "FCA", "PHL", "CHS", "AVL", "AVL"],
[
["RIC", "PHF", "MEM", "LGA", "LEX", "JAC", "CHO", "DHN", "RDU", "CHS"],
[7064, 6686, 6134, 6112, 5667, 5616, 5528, 5462, 5115, 5069]
]
]
正如您的尝试所示,可以通过将数据框转换为某个列表来实现结果。特别是,使用
split(price[, -1], price$flyFrom)
# $AAE
# flyTo price
# 1 ALG 48
# 2 ORN 84
# 3 MRS 158
# 4 LYS 186
# 5 ORY 198
# 6 IST 374
# $YYE
# flyTo price
# 7 YXY 48
# 8 YDQ 78
# 9 YXJ 200
给予
toJSON(split(price[, -1], price$flyFrom), pretty = TRUE)
{
"AAE": [
{
"flyTo": "ALG",
"price": 48
},
{
"flyTo": "ORN",
"price": 84
},
{
"flyTo": "MRS",
"price": 158
},
{
"flyTo": "LYS",
"price": 186
},
{
"flyTo": "ORY",
"price": 198
},
{
"flyTo": "IST",
"price": 374
}
],
"YYE": [
{
"flyTo": "YXY",
"price": 48
},
{
"flyTo": "YDQ",
"price": 78
},
{
"flyTo": "YXJ",
"price": 200
}
]
}
我有一些数据如下所示:
flyFrom flyTo price
1 AAE ALG 48
2 AAE ORN 84
3 AAE MRS 158
4 AAE LYS 186
5 AAE ORY 198
6 AAE IST 374
...
我想把它改造成这样的东西:
{"AAE": [
"ALG", 48,
"ORN", 84,
"MRS", 158,
"LYS", 186,
"ORY", 198,
"IST", 374
...
],
"YYE": [
"YXY", 48,
"YDQ", 78,
"YXJ", 200
]}
我花了大约一个小时尝试不同的东西,但我不确定如何将它放入我想要的结构中。我现在正在使用 jsonlite,但我可以使用你推荐的任何东西
编辑:我希望价格列也包括在内,但我也不确定最简洁的实现是什么。 flyTo 和 price 之间的关系永远是 1:1
edit2:我能把它拉出来,但还不够
> test<-head(price,10)[c(1,2,3)]
> test2<-list(test$flyFrom,list(test$flyTo,test$price))
> jsonlite::toJSON(test2, pretty = TRUE,auto_unbox = TRUE)
[
["BUF", "CAK", "JAN", "PHF", "CAE", "FCA", "PHL", "CHS", "AVL", "AVL"],
[
["RIC", "PHF", "MEM", "LGA", "LEX", "JAC", "CHO", "DHN", "RDU", "CHS"],
[7064, 6686, 6134, 6112, 5667, 5616, 5528, 5462, 5115, 5069]
]
]
正如您的尝试所示,可以通过将数据框转换为某个列表来实现结果。特别是,使用
split(price[, -1], price$flyFrom)
# $AAE
# flyTo price
# 1 ALG 48
# 2 ORN 84
# 3 MRS 158
# 4 LYS 186
# 5 ORY 198
# 6 IST 374
# $YYE
# flyTo price
# 7 YXY 48
# 8 YDQ 78
# 9 YXJ 200
给予
toJSON(split(price[, -1], price$flyFrom), pretty = TRUE)
{
"AAE": [
{
"flyTo": "ALG",
"price": 48
},
{
"flyTo": "ORN",
"price": 84
},
{
"flyTo": "MRS",
"price": 158
},
{
"flyTo": "LYS",
"price": 186
},
{
"flyTo": "ORY",
"price": 198
},
{
"flyTo": "IST",
"price": 374
}
],
"YYE": [
{
"flyTo": "YXY",
"price": 48
},
{
"flyTo": "YDQ",
"price": 78
},
{
"flyTo": "YXJ",
"price": 200
}
]
}