首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中选择JSON数据的特定部分?

如何在R中选择JSON数据的特定部分?
EN

Stack Overflow用户
提问于 2017-01-03 05:03:58
回答 1查看 2.4K关注 0票数 1

我试图将数据从url导入到以JSON形式出现的R中,然后将其导出到Excel文件中。

urlhttps://api.typeform.com/v1/form/JlCM2J?key=ecab3f590a2af4ca55468adc95686a043bbf6c9a

这是我的R码

代码语言:javascript
复制
library(data.table)
library(httr)
library(rjson)

set_config(config(ssl_verifypeer = 0L))

var1=fread('https://api.typeform.com/v1/form/JlCM2J?key=ecab3f590a2af4ca55468adc95686a043bbf6c9a')

head(var1)

输出:

空data.table (0行):{"http_status":200,stats:{“http_status”:2,“总计”:2,“已完成”:1},“问题”:[{id“:”textfield_38991412,问题“:”您的名字是什么?,field_id":38991412},{"id":"statement_38991416,问题“:”Hi{answer_38991412}}],谢谢您接受这个questionnaire.Your答案,这将帮助我们为您建立一个伟大的品牌。一个强大和难忘的客户心目中。定义你是什么,你代表什么,什么使你与众不同。让我们开始吧!,field_id:38991416},{“id”:“group_38991407.

需要:I只需要将数据的responses部分导出为文件。

可以通过粘贴jsonviewer.stack.hu站点中的上述url来查看整个数据。

EN

回答 1

Stack Overflow用户

发布于 2017-01-03 10:52:57

以下是现代R中与REST接口的更多(IMO)惯用方式:

代码语言:javascript
复制
library(httr)
library(jsonlite)
library(dplyr)

res <- GET("https://api.typeform.com/v1/form/JlCM2J",
           query=list(key="ecab3f590a2af4ca55468adc95686a043bbf6c9a"))

content(res, as="text") %>%
  fromJSON(flatten=FALSE) -> out

glimpse(out$responses$answers)
## Observations: 2
## Variables: 26
## $ textfield_38991412                 <chr> NA, "A"
## $ dropdown_38991418                  <chr> NA, "Accounting"
## $ textarea_38991420                  <chr> NA, "A"
## $ textfield_38991413                 <chr> NA, "A"
## $ textarea_38991421                  <chr> NA, "A"
## $ listimage_38991426_choice          <chr> NA, "Company"
## $ textfield_38991414                 <chr> NA, "A"
## $ website_38991435                   <chr> NA, "http://A.com"
## $ textarea_38991422                  <chr> NA, "A"
## $ listimage_38991427_choice          <chr> NA, "Sincere"
## $ listimage_38991428_choice          <chr> NA, "Male"
## $ list_38991436_choice               <chr> NA, "17 or younger"
## $ list_38991437_choice               <chr> NA, "Upper class"
## $ listimage_38991429_choice_49501105 <chr> NA, "Store"
## $ listimage_38991430_choice          <chr> NA, "Product"
## $ textarea_38991423                  <chr> NA, "A"
## $ listimage_38991431_choice          <chr> NA, "Techy"
## $ listimage_38991432_choice_49501124 <chr> NA, "Fuchsia Rose"
## $ listimage_38991433_choice          <chr> NA, "Classic"
## $ list_38991438_choice               <chr> NA, "$3,000 or less"
## $ listimage_38991434_choice_49501140 <chr> NA, "Brand Design"
## $ textarea_38991424                  <chr> NA, "A"
## $ textfield_38991415                 <chr> NA, "A"
## $ dropdown_38991419                  <chr> NA, "Afghanistan"
## $ email_38991439                     <chr> NA, "A@a.com"
## $ textarea_38991425                  <chr> NA, "A"
  • 直接使用httr::GET()可以更容易地管理额外的参数。
  • 使用httr::content()获取响应并检索原始文本,可以进行更细粒度的处理(如果需要的话)
  • 直接使用jsonlite::fromJSON()可以对单个JSON处理选项提供更细粒度的控制。

然而,有一个R包rtypeform,它真正简化了一切(有趣的事实:它遵循上面的成语在封面下面):

代码语言:javascript
复制
library(rtypeform)
library(dplyr)

res <- get_results("JlCM2J")

glimpse(res$responses$answers)
## Observations: 2
## Variables: 26
## $ textfield_38991412                 <chr> NA, "A"
## $ dropdown_38991418                  <chr> NA, "Accounting"
## $ textarea_38991420                  <chr> NA, "A"
## $ textfield_38991413                 <chr> NA, "A"
## $ textarea_38991421                  <chr> NA, "A"
## $ listimage_38991426_choice          <chr> NA, "Company"
## $ textfield_38991414                 <chr> NA, "A"
## $ website_38991435                   <chr> NA, "http://A.com"
## $ textarea_38991422                  <chr> NA, "A"
## $ listimage_38991427_choice          <chr> NA, "Sincere"
## $ listimage_38991428_choice          <chr> NA, "Male"
## $ list_38991436_choice               <chr> NA, "17 or younger"
## $ list_38991437_choice               <chr> NA, "Upper class"
## $ listimage_38991429_choice_49501105 <chr> NA, "Store"
## $ listimage_38991430_choice          <chr> NA, "Product"
## $ textarea_38991423                  <chr> NA, "A"
## $ listimage_38991431_choice          <chr> NA, "Techy"
## $ listimage_38991432_choice_49501124 <chr> NA, "Fuchsia Rose"
## $ listimage_38991433_choice          <chr> NA, "Classic"
## $ list_38991438_choice               <chr> NA, "$3,000 or less"
## $ listimage_38991434_choice_49501140 <chr> NA, "Brand Design"
## $ textarea_38991424                  <chr> NA, "A"
## $ textfield_38991415                 <chr> NA, "A"
## $ dropdown_38991419                  <chr> NA, "Afghanistan"
## $ email_38991439                     <chr> NA, "A@a.com"
## $ textarea_38991425                  <chr> NA, "A"

无论哪种方式,如果您不习惯使用$访问列表中的字段,这必须是您第一次使用R(或者几乎是您的第一次)。在尝试使用API数据之前,您确实应该花一些时间学习R。不正确的结果和自我挫折感是你通过编码得到的唯一回报--剪切、粘贴和祈祷。您仍然需要将其放入CSV文件(write.csv()表示该文件)。

总之,如果您最终要使用Excel,为什么要以编程方式检索表单响应?如果您不打算在其余的工作中使用R,这似乎是一个不必要的步骤,除非您试图脚本下载的数据,并让某人登录到网站获取它。

最后,使您的API密钥无效并立即重新生成,因为您在一个开放的论坛上发布了它。我现在知道你有两个表单:“品牌问卷”和“测试表格”,并且能够监控你在Typeform中所做的事情,并随时检索您的表单数据。rtypeform包将允许您将API密钥存储在typeform_api环境变量中(您可以使用~/.Renviron来保存这些数据),因此您不必在脚本中再次向世界公开它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41436723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档