【问题标题】:Transform dataframe into JSON object with jsonlite using R使用 R 使用 jsonlite 将数据帧转换为 JSON 对象
【发布时间】:2021-07-11 16:01:59
【问题描述】:

我正在尝试将data.frame转换为JSON对象,我包括数据表的结构,使用jsonlite包的toJSON()函数的R代码,获得的结果和预期的结果。我在函数中做了各种join,但找不到解决办法。

data.frame有这样的结构,我总结了一下,以免把所有的数据都转储出来:


structure(list(`Código Municipio INE` = c("02003", "03014"), Municipio = c("Albacete", "Alicante/Alacant"), `Esfuerzo Social por Habitante` = c(66.255518296917, 
55.4505971732305), `Relevancia Esfuerzo Social` = c(0.0779438999416286, 
0.075567624299619), `Umbral Pobreza` = c(21, 
28.8), `Umbral Pobreza Hombres` = c(20.5, 29), `Umbral Pobreza Mujeres` = c(21.5, 28.6)), class = "data.frame", row.names = c(NA, 
-2L))

我使用 jsonlite 进行转换:


toJSON( 
 list(
  list(
   name = dfon$Municipio,
   data = list(
    dfon[, which(colnames(dfon) != "Municipio")],
    x = dfon$`Esfuerzo Social por Habitante`,
    y = dfon$`Umbral Pobreza`,
    size = dfon$`Relevancia Esfuerzo Social`
   )
  )
 ), pretty=TRUE)

我得到的结果是这样的:


[
  {
    "name": ["Albacete", "Alicante/Alacant"],
    "data": {
      "1": [
        {
          "Código Municipio INE": "02003",
          "Esfuerzo Social por Habitante": 66.2555,
          "Relevancia Esfuerzo Social": 0.0779,
          "Umbral Pobreza": 21,
          "Umbral Pobreza Hombres": 20.5,
          "Umbral Pobreza Mujeres": 21.5
        },
        {
          "Código Municipio INE": "03014",
          "Esfuerzo Social por Habitante": 55.4506,
          "Relevancia Esfuerzo Social": 0.0756,
          "Umbral Pobreza": 28.8,
          "Umbral Pobreza Hombres": 29,
          "Umbral Pobreza Mujeres": 28.6
        }
      ],
      "x": [66.2555, 55.4506],
      "y": [21, 28.8],
      "size": [0.0779, 0.0756]
    }
  }
] 

但我需要这样的格式,即每条记录必须有两个key,name和data:


[
  {
    "name":"Albacete",
    "data":[
      {
        "Código Municipio INE":"02003",
        "Municipio":"Albacete",
        "Esfuerzo Social por Habitante":66.255518296917,
        "Relevancia Esfuerzo Social":0.0779438999416286,
        "Umbral Pobreza":21,
        "Umbral Pobreza Hombres":20.5,
        "Umbral PobrezaMujeres":21.5,
        "x":66.255518296917,
        "y":21,
        "size":7.79438999416286,
      }
    ]
  },

  {
    "name":"Alicante/Alacant",
    "data":[
      {
        "Código Municipio INE":"03014",
        "Municipio":"Alicante/Alacant",
        "Esfuerzo Social por Habitante":55.4505971732305,
        "Relevancia Esfuerzo Social":0.075567624299619,
        "Umbral Pobreza":28.8,
        "Umbral Pobreza Hombres":29,
        "Umbral Pobreza Mujeres":28.6,
        "x":55.4505971732305,
        "y":28.8,
        "size":7.5567624299619,
      }
    ]
  }
]

【问题讨论】:

  • 您最好先将split 您的数据框按名称转换为列表,然后将其转换为 JSON?

标签: r json jsonlite


【解决方案1】:

你可以这样做:

df<- data.frame(name = d$Municipio)
df$data<- split(d, d$Municipio)
jsonlite::toJSON(df)

【讨论】:

    【解决方案2】:

    我们可以使用group_split

    library(dplyr)
    library(jsonlite)
    df %>%
        group_split(Municipio) %>%
        toJSON
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-13
      • 2014-08-22
      • 1970-01-01
      • 2018-03-27
      • 1970-01-01
      • 2018-05-02
      • 2014-04-15
      • 2019-09-26
      相关资源
      最近更新 更多