使用 R 使用 jsonlite 将数据帧转换为 JSON 对象

问题描述

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

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

解决方法

你可以这样做:

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

我们可以使用group_split

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