【问题标题】:Create one to many nested JSON object in R在 R 中创建一对多的嵌套 JSON 对象
【发布时间】:2018-11-17 04:10:59
【问题描述】:

我有一些看起来像这样的数据:

  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]
]
] 

【问题讨论】:

    标签: r json jsonlite


    【解决方案1】:

    正如您的尝试所展示的,可以通过将数据框转换为特定列表来实现结果。特别是,使用

    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
        }
      ]
    } 
    

    【讨论】:

    • @jaksco,现在我在想这可能不是您所追求的格式,或者是吗?
    • 我认为这非常适合我的用例。谢谢! :D
    • 你知道如何将这个列表的元素与现有的数据框合并吗? stackoverflow.com/questions/53577356/…
    猜你喜欢
    • 1970-01-01
    • 2018-12-29
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 2017-12-22
    • 1970-01-01
    • 2016-10-16
    相关资源
    最近更新 更多