【问题标题】:Parse JSON with R用 R 解析 JSON
【发布时间】:2013-08-27 01:38:00
【问题描述】:

我对 R 比较陌生,但使用它的次数越多,我就越能看到它在 SAS 或 SPSS 上的真正强大之处。在我看来,主要好处之一就是能够从网络获取和分析数据。我想这是可能的(甚至可能很简单),但我希望解析网络上公开的 JSON 数据。我绝对不是程序员,因此您可以提供的任何帮助和指导将不胜感激。即使你给我指出一个基本的工作示例,我也可能可以完成它。

【问题讨论】:

    标签: json r


    【解决方案1】:

    来自 Omegahat 的RJSONIO 是另一个提供以 JSON 格式读取和写入数据的工具。

    rjson 不使用 S4/S3 方法,因此不易扩展,但仍然有用。不幸的是,它没有使用矢量化操作,因此对于非平凡数据来说太慢了。同样,将 JSON 数据读入 R 时,速度有点慢,因此无法扩展到大数据,如果这是一个问题的话。

    更新(新包 2013-12-03):

    jsonlite:这个包是RJSONIO 包的一个分支。它基于 RJSONIO 的解析器构建,但在 R 对象和 JSON 字符串之间实现了不同的映射。此包中的 C 代码大部分来自 RJSONIO 包,R 代码已从头开始重写。除了直接替换fromJSONtoJSON 之外,该包还具有序列化对象的功能。此外,该包还包含大量单元测试,以确保所有边缘情况都经过一致的编码和解码,以便在系统和应用程序中与动态数据一起使用。

    【讨论】:

    • 我发现 rjson、RJSONIO 和 jsonlite 的 this comparison 很有帮助
    • 上面的比较链接失效了。 this 是正确的链接吗? (区别是https)
    【解决方案2】:

    jsonlite 包易于使用,并尝试将 json 转换为数据帧。

    例子:

    library(jsonlite)
    
    # url with some information about project in Andalussia
    url <- 'https://api.stackexchange.com/2.2/badges?order=desc&sort=rank&site=stackoverflow'
    
    # read url and convert to data.frame
    document <- fromJSON(txt=url)
    

    【讨论】:

    • 这对于我需要的东西来说非常容易使用。非常感谢
    • 文档
    • 喜欢这个。似乎比 rjson 造成的混乱要好得多。
    • 除非原来的 json 格式已经被扁平化了,否则jsonlite 或多或少和吃汤的叉子一样有用。
    【解决方案3】:

    这是缺少的示例

    library(rjson)
    url <- 'http://someurl/data.json'
    document <- fromJSON(file=url, method='C')
    

    【讨论】:

    • 这对我有用,但您不想为文件变量名传递字符串,如图所示。
    【解决方案4】:

    RJSONIO、rjson 和 jsonlite 中的函数 fromJSON() 不会为复杂的嵌套 json 对象返回简单的 2D data.frame。

    要克服这个问题,您可以使用 tidyjson。它接受一个 json 并总是返回一个 data.frame。目前在 CRAN 中不可用,您可以在此处获取:https://github.com/sailthru/tidyjson

    更新: tidyjson 现已在 cran 中可用,您可以直接使用 install.packages("tidyjson") 安装它

    【讨论】:

      【解决方案5】:

      为了记录,rjson 和 RJSONIO 确实改变了文件类型,但它们本身并没有真正解析。例如,我收到 JSON 格式的丑陋 MongoDB 数据,用 rjson 或 RJSONIO 转换它,然后使用 unlist 和大量手动校正将其实际解析为可用矩阵。

      【讨论】:

        【解决方案6】:

        在控制台中使用 RJSONIO 尝试以下代码

        library(RJSONIO)
        library(RCurl)
        
        
        json_file = getURL("https://raw.githubusercontent.com/isrini/SI_IS607/master/books.json")
        
        json_file2 = RJSONIO::fromJSON(json_file)
        
        head(json_file2)
        

        【讨论】:

          猜你喜欢
          • 2015-07-22
          • 2017-02-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-18
          相关资源
          最近更新 更多