【问题标题】:How to convert R dataframe to Json in name/value pair?如何将 R 数据帧转换为名称/值对中的 Json?
【发布时间】:2018-03-03 04:46:21
【问题描述】:

我有以下 R 数据框:

        Values
Type1   123
Type2   4565
Type3   7812

我希望 JSON 输出是

{"Type1":123, "Type2":4565, "Type3":7812}

数字字段可以不带引号

我用jsonlite toJSON,输出是:

[{"Values":123,"_row":"Type1"}, 
 {"Values": 4565,"_row":"Type2"}, 
 {"Values": 7812,"_row":"Type3"}]

【问题讨论】:

  • 似乎不同,在我的情况下,行名是动态的。
  • 试试toJSON(as.list(setNames(df$Values,rownames(df))),auto_unbox=TRUE)

标签: json r dataframe jsonlite


【解决方案1】:

使用rjson的解决方案:

df <- data.frame(Values = c(123, 4565, 7812))
rownames(df) <- paste0("Type", 1:3)

library(rjson)
toJSON(setNames(df$Values, rownames(df)))

[1] "{\"Type1\":123,\"Type2\":4565,\"Type3\":7812}"

【讨论】:

  • 似乎 jsonlite 在同一个“toJSON”命令中删除了名称。我会尝试使用 rjson。
  • 顺便说一句,字符串可以使用 t(fromJSON("{\"Type1\":123,\"Type2\":4565,\"Type3\":7812}" ))
【解决方案2】:

jsonlite 实际上是在保留您的数据结构,即保留您的行名Type1Type2Type3)。

无论如何,使用 jsonlite 您可以获得相同的行为:

> jsonlite::toJSON(df %>% t() %>% tibble::as_data_frame())
[{"Type1":123,"Type2":4565,"Type3":7812}] 

请注意,使用此解决方案您将丢失原始列名Values。如果行名很重要但列名不重要,您应该考虑以不同的方式定义数据,因为处理rownames 可以得到messy。您可以将类型添加为第二列或转置数据 - 一行,与类型一样多的列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 2022-12-14
    相关资源
    最近更新 更多