【问题标题】:convert xlsx to json using R使用 R 将 xlsx 转换为 json
【发布时间】:2018-04-24 11:09:57
【问题描述】:

我首先拆开 xlsx 文件,它由多张纸组成。

# install.packages("readxl")

library(readxl)
library("rjson")

# read_excel reads
df1 <- read_excel("C:/Users/Adminstrator/Downloads/file.xlsx", sheet = 1)
df2 <- read_excel("C:/Users/Adminstrator/Downloads/file.xlsx", sheet = 2)
df3 <- read_excel("C:/Users/Adminstrator/Downloads/file.xlsx", sheet = 3)

df的内容如下。

Alabama Hoover 33.40556 -86.81111
Alabama Hoover 33.40565 -86.81314
Alabama Hoover 33.40555 -86.81343
Alabama Dothan 31.22722 -85.40722
Alabama Gadsden 34.01028 -86.01028
Alaska Chugiak 61.38778 -149.48139
...

我想用 json 替换这个 xlsx 文件。

{
  "Alabama" : { 
                "Hoover": {
                           "x":[33.40556, 33.40565, 33.40555],
                           "y":[-86.81111, -86.81314, -86.81343]
                          },
                "Dothan": {
                           "x":[31.22722],
                           "y":[-85.40722]
                          },
                  ...
              },
  "Alaska" : {
               "Chugiak" : {
                            "x":[61.38778],
                            "y":[-149.48139]
                           },
               ...
             }
  ...
}

如何将 xlsx 文件更改为 json? 请帮我。 谢谢。

【问题讨论】:

  • 您的数据不是excel,而是data.frame(或它的一些变体)。您可以使用rjsonjsonlite 中的toJSON 函数。例如stackoverflow.com/questions/25550711/convert-data-frame-to-json
  • 这不会把它变成所需的格式@RomanLuštrik。 OP 希望将数据放入自定义格式而不做任何工作。在其他 q 中,我不认为 R 或 python 是他们的主要语言。
  • 您可以通过编程将数据框更改为所需的格式。按第一列和第二列中的唯一值进行分组/迭代,并从中构建 JSON 字符串。您甚至没有展示过尝试以及遇到问题的地方。

标签: json r xlsx


【解决方案1】:

data.tablesplit 函数在这里非常有用。

dd <- data.frame(
  state = c("Alabama", "Alabama", "Alabama", "Alsaka"),
  city = c("Hoover", "Hoover", "Dothan", "Chugiak"),
  x = c(1, 2, 3, 4),
  y = c(5, 6, 7, 8), 
  stringsAsFactors=FALSE
)

library(data.table)
dt <- as.data.table(dd)
dt_split <- split(dt, by=c("state", "city"), keep.by=FALSE, flatten=FALSE)

你得到:

> dt_split
$Alabama
$Alabama$Hoover
   x y
1: 1 5
2: 2 6

$Alabama$Dothan
   x y
1: 3 7


$Alsaka
$Alsaka$Chugiak
   x y
1: 4 8

现在使用jsonlite:

> library(jsonlite)
> toJSON(dt_split, dataframe = "columns", pretty=TRUE)
{
  "Alabama": {
    "Hoover": {
      "x": [1, 2],
      "y": [5, 6]
    },
    "Dothan": {
      "x": [3],
      "y": [7]
    }
  },
  "Alsaka": {
    "Chugiak": {
      "x": [4],
      "y": [8]
    }
  }
} 

【讨论】:

  • 我非常感谢 JSON 错误(dt_split、dataframe = "columns"、pretty = TRUE)。未使用的参数 (dataframe = "columns", pretty = TRUE) 发生此错误。为什么会这样?
  • 哦,解决了。非常感谢您让我知道!
猜你喜欢
  • 2022-09-25
  • 2015-02-01
  • 2015-06-18
  • 2023-01-19
  • 2019-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多