用jsonlite在R中构造json-括号太多

问题描述 投票:1回答:1

不是json专家,但是我需要我认为被称为“嵌套对象”的东西,而我正在获取我认为被称为“嵌套数组”的东西。换句话说,一些额外的括号。我正在尝试在R中使用jsonlite将数据帧转换为json数据。可复制的代码和结果如下。谁能指出我如何获取正确格式的数据(行作为嵌套对象)?

library(jsonlite)

testdat <- data.frame(locationColumn = c("US", "US"),
                      nameColumn = c("General Motors", "Walmart"), 
                      zipColumn = c(19890, 72712) )

jsl <- jsonlite::toJSON(
  list(
    rows = split(testdat, 1:nrow(testdat))
  ), 
  auto_unbox = TRUE,
  pretty = TRUE,
  dataframe = "rows",
  simplifyDataFrame = TRUE
)

jsl

输出:

{
  "rows": {
    "1": [
      {
        "locationColumn": "US",
        "nameColumn": "General Motors",
        "zipColumn": 19890
      }
    ],
    "2": [
      {
        "locationColumn": "US",
        "nameColumn": "Walmart",
        "zipColumn": 72712
      }
    ]
  }
} 

我需要:

{
  "rows": {
    "1":{
         "locationColumn": "US",
         "nameColumn": "General Motors",
         "zipColumn": 19890
        },
    "2":{
         "locationColumn": "US",
         "nameColumn": "Walmart",
         "zipColumn": 72712
        }
  }
}
r json jsonlite
1个回答
0
投票

这里是可能的解决方案:

library(jsonlite)

testdat <- data.frame(locationColumn = c("US", "US"),
                      nameColumn = c("General Motors", "Walmart"), 
                      zipColumn = c(19890, 72712) )

jsl <- jsonlite::toJSON(
  list(
    rows = split(testdat, 1:nrow(testdat))
  ), 
  auto_unbox = TRUE,
  pretty = TRUE,
  dataframe = "columns",  #change from rows (moves brackets from row level to value level)
  simplifyDataFrame = TRUE
)

#removed the backets if desired
jsl<-gsub("\\[|\\]", "", jsl)

all.equal(testcase, fromJSON(jsl))
testcase<-fromJSON('{
  "rows": {
    "1":{
         "locationColumn": "US",
         "nameColumn": "General Motors",
         "zipColumn": 19890
        },
    "2":{
         "locationColumn": "US",
         "nameColumn": "Walmart",
         "zipColumn": 72712
        }
  }
}')

all.equal(testcase, fromJSON(jsl))
#[1] TRUE
© www.soinside.com 2019 - 2024. All rights reserved.