我有一些JSON数据,这是一个片段:
{"sweater":"15", "localtime":"7:14 PM", "xcoord":-61,
"desc":"John Smith SHOT on Jack Jones", "teamid":10,"strength":701,
"pid":8465200,"formalEventId":"TOR8", "period":1, "type":"Shot", "p3name":"",
"eventid":8, "p2name":"Jack Jones", "ycoord":21, "pid3":"", "time":"00:38",
"playername":"John Smith", "p1name":"John Smith",
"video":"2_26_ott_tor_0910_TOR8_save_800K_16x9.flv", "pid2":8469461, "pid1":8465200}
我想从这种格式的HTML网址中获取此信息:
http://foo.com/data/20092010/20090xxxxx/PxP.jsonp
其中xxxxx是一个5位数的游戏代码,我想从列表中插入(通过循环)。
我最需要的数据是:毛衣,xcoord,teamid,力量,时期,类型,ycoord,时间,玩家名称以及将游戏代码(xxxxx)作为列插入。
所以它会是:
游戏代码,毛衣,xcoord,队友,力量,时期,类型,ycoord,时间,球员名称
然后,将所有信息导出到一(1)个CSV文件中。
任何人都可以帮我指点正确的方向吗?
编辑:
我尝试使用以下代码将json文件导入为本地文件:
#libraries
library(RCurl)
library(rjson)
library(bitops)
#fetch data
j <- getURL("file:///Desktop/test.jsonp")
#grab JSON
j.list <- fromJSON(j)
#get each data item
j.df <- data.frame(playername = sapply(j.list, function(x) x$sweater))
j.df <- data.frame(xcoord = sapply(j.list, function(x) x$xcoord))
j.df <- data.frame(ycoord = sapply(j.list, function(x) x$ycoord))
j.df <- data.frame(type = sapply(j.list, function(x) x$type))
write.csv(j.df, file="fooPxP.csv")
并获取一个空的CSV文件。我有什么想法我做错了吗?
以下是一些开始的实际数据文件:
loadPlayByPlay({"data":{"refreshInterval":0,"game":{"awayteamid":9,"awayteamname":"Ottawa Senators","hometeamname":"Toronto Maple Leafs","plays":{"play":[{"sweater":"11","localtime":"7:14 PM","xcoord":76,"desc":"Daniel Alfredsson HIT on Tomas Kaberle","teamid":9,"strength":701,"pid":8460621,"formalEventId":"TOR51","period":1,"type":"Hit","p3name":"","eventid":51,"p2name":"Tomas Kaberle","ycoord":-40,"pid3":"","time":"00:16","playername":"Daniel Alfredsson","p1name":"Daniel Alfredsson","pid2":8465200,"pid1":8460621},{"sweater":"15","localtime":"7:14 PM","xcoord":-61,"desc":"Tomas Kaberle SHOT on Pascal Leclaire","teamid":10,"strength":701,"pid":8465200,"formalEventId":"TOR8","period":1,"type":"Shot","p3name":"","eventid":8,"p2name":"Pascal Leclaire","ycoord":21,"pid3":"","time":"00:38","playername":"Tomas Kaberle","p1name":"Tomas Kaberle","video":"2_26_ott_tor_0910_TOR8_save_800K_16x9.flv","pid2":8469461,"pid1":8465200}}})
提前致谢!
答案 0 :(得分:2)
我写了an article从URL获取JSON并转换为数据框,这可能会帮助您开始。
您可以使用RCurl库中的getURL()获取数据,如下所示:
library(RCurl)
j <- getURL("http://foo.com/data/20092010/20090xxxxx/PxP.jsonp")
接下来,rjson包中的fromJSON()应该将其转换为列表:
library(rjson)
j.list <- fromJSON(j)
然后,您可以从列表中构建数据框。例如,要获取名为“sweater”的列,请尝试:
j.df <- data.frame(sweater = sapply(j.list, function(x) x$sweater))
只需使用其他JSON密钥将更多列作为参数添加到data.frame()。
要添加“xxxxx”,您需要使用类似grep()的内容来解析URL。
获得数据框后,可以使用write.table()或write.csv()写入CSV。对于许多URL,您必须弄清楚如何将fromJSON()生成的列表组合到一个数据框中。
答案 1 :(得分:1)
有R函数用于从URL读取任何内容(请参阅help(download.file),以及CRAN上用于处理json数据的rjson包。如果它真的是JSONP,可能需要进行一些调整。
对于类似的示例,请查看我的geonames包 - 它从geonames.org读取JSON数据并构造数据框。
如果它不在CRAN上那么它就在R-Forge上。我忘了..
答案 2 :(得分:0)
撰写文件 由于安全限制,对于大多数浏览器而言,在客户端写入文件是有问题的。 在Internet Explorer中,您只能使用execCommand编写文件 - 例如http://4umi.com/web/javascript/filewrite.php。
将json翻译为CSV 我遇到了从json转换为csv的问题。 http://skysanders.net/subtext/archive/2010/09/19/json-to-csv.aspx
<强>替代强> 在服务器上生成转换并下载到浏览器直接文本(这是mime text / plain)