【问题标题】:R - Unable to Create a JSON fileR - 无法创建 JSON 文件
【发布时间】:2015-02-16 17:29:32
【问题描述】:

我搜索了论坛并没有找到类似的问题,所以如果我可能错过了,我深表歉意。

简单地说,我得到了一个JSON 文件,我想创建它。所以我认为一个简单的方法是用jsonlite包中的fromJSON函数解析文件并查看R对象的结构,然后尝试通过首先创建R对象来创建JSON文件和使用函数toJSON

我得到的JSON 文件如下:

[[{"name":"Wine"},{"data":[{"rating":"23.45","month":8,"year":2012,"day":8},{"rating":"23.66","month":8,"year":2012,"day":9},{"rating":"24.75","month":8,"year":2013,"day":9},{"rating":"24.97","month":8,"year":2013,"day":12}]}]]

使用fromJSON 函数解析上述JSON 文件会得到以下对象:

str(object)

List of 1
$ :'data.frame':    2 obs. of  2 variables:
  ..$ name: chr [1:2] "Wine" NA
  ..$ data:List of 2
  .. ..$ : NULL
  .. ..$ :'data.frame': 248 obs. of  4 variables:
  .. .. ..$ rating: chr [1:248] "23.45" "23.66" "23.59" "23.48" ...
  .. .. ..$ month : int [1:248] 8 8 8 8 8 8 8 8 8 8 ...
  .. .. ..$ year  : int [1:248] 2012 2012 2012 2012 2012 2012 2012 2012 ...
  .. .. ..$ day   : int [1:248] 8 9 10 13 14 15 16 17 20 21 ...

创建上述对象。这些值是随机的

name = c("Wine", NA)
data = list(NULL, data.frame(rating = as.character(c(1:248)), month = as.integer(rep(12, 248)), year = as.integer(rep(1940, 248)), day = as.integer(rep(31, 248)), stringsAsFactors = FALSE))
result = data.frame(name, data)

最后一行给出了错误:

Error in data.frame(NULL, list(rating = c("1", "2", "3", "4", "5", "6",  :   arguments imply differing number of rows: 0, 248

有人有想法吗?

【问题讨论】:

    标签: json r jsonlite


    【解决方案1】:

    显然data.frame() 函数递归到它接收到的列表的第二个元素或类似的东西。

    在原始示例中构建此类数据框的一种可能方法是替换列,例如:

    result <- data.frame(name=name,data=NA)
    result$data <- data
    

    那么你就有了:

    str(result)
    
    'data.frame':   2 obs. of  2 variables:
     $ name: Factor w/ 1 level "Wine": 1 NA
     $ data:List of 2
      ..$ : NULL
      ..$ :'data.frame':    248 obs. of  4 variables:
      .. ..$ rating: chr  "1" "2" "3" "4" ...
      .. ..$ month : int  12 12 12 12 12 12 12 12 12 12 ...
      .. ..$ year  : int  1940 1940 1940 1940 1940 1940 1940 1940 1940 1940 ...
      .. ..$ day   : int  31 31 31 31 31 31 31 31 31 31 ...
    

    【讨论】:

    • 非常感谢。这正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 2020-06-14
    • 2019-06-06
    • 2021-12-01
    • 2015-07-20
    • 2014-06-27
    • 1970-01-01
    相关资源
    最近更新 更多