如何将json转换为tibble

问题描述

我有以下json数据

{"data": {"cat1": ["value1","value2","value3","value4","value5"],"cat2": ["aaa","bbb","ccc"]},"info": ""}

我想将数据转换为以下内容。我如何使用函数“fromJSON”来做到这一点

var1 var2 var3
数据 cat1 value1
数据 cat1 value2
数据 cat1 value3
数据 cat1 value4
数据 cat1 value5
数据 cat2 aaa
数据 cat2 bbb
数据 cat2 ccc
信息

解决方法

以下是使用 tidyverse 包针对您的问题的基于 jsonlite 的解决方案。在读取 .JSON 文件时,分解 fromJSON 创建的列表结构非常容易。其余部分是 tidyverse 功能的应用程序。请注意,Test.json 文件包含您提供的数据。

代码

cols = c("var1","var2","var3")
A <- fromJSON("Test.json")
B <- A %>% 
      unique %>% 
        unlist %>% 
           as.data.frame %>% 
           tibble::rownames_to_column() %>% 
              mutate(rowname = substr(rowname,1,nchar(rowname) - 1),var1 = c(rep(names(A)[1],length(rowname) - 1),names(A)[2])) %>% 
                 rename(!!cols[1] := var1,!!cols[2] := rowname,!!cols[3] := .) %>% 
                    select(var1,var2,var3) 

输出

  var1 var2   var3
1 data cat1 value1
2 data cat1 value2
3 data cat1 value3
4 data cat1 value4
5 data cat1 value5
6 data cat2    aaa
7 data cat2    bbb
8 data cat2    ccc
9 info