Импорт данных JSONP со страницы HTML, а затем экспорт в CSV - PullRequest
2 голосов
/ 10 февраля 2011

У меня есть некоторые данные 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}

Я хотел бы получить эту информацию из URL-адреса HTML в следующем формате:

http://foo.com/data/20092010/20090xxxxx/PxP.jsonp

где xxxxx - это 5-значный код игры, который я хотел бы вставить из списка (через цикл).

Больше всего мне нужны следующие данные: свитер, xcoord, teamid, сила, период, введите, ycoord, время, имя игрока И чтобы код игры (xxxxx) также был вставлен в виде столбца.

Так будет:

Код игры, свитер, xcoord, teamid, сила, период, тип, 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}}})

Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 11 февраля 2011

Я написал статью о получении JSON из URL-адреса и преобразовании во фрейм данных, что может помочь вам начать работу.

Вы можете получить данные с помощью getURL () вбиблиотека RCurl, например:

library(RCurl)
j <- getURL("http://foo.com/data/20092010/20090xxxxx/PxP.jsonp")

Далее, fromJSON () в пакете rjson должен преобразовать ее в список:

library(rjson)
j.list <- fromJSON(j)

Затем можно построить фрейм данных изсписок.Например, чтобы получить столбец с именем «свитер», попробуйте:

j.df <- data.frame(sweater = sapply(j.list, function(x) x$sweater))

Просто добавьте больше столбцов в качестве аргументов для data.frame (), используя другие ключи JSON.

Чтобы добавить«xxxxx», вам нужно будет проанализировать URL, используя что-то вроде grep ().

Получив фрейм данных, вы можете записывать в CSV, используя write.table () или write.csv (),Для многих URL вам придется выяснить, как объединить списки, сгенерированные функцией fromJSON (), в один фрейм данных.

1 голос
/ 10 февраля 2011

Есть функции R для чтения чего-либо из URL (см. Help (download.file), а также пакет rjson в CRAN для обработки данных json. Может потребоваться некоторая настройка, если это действительно JSONP.

Дляаналогичный пример, посмотрите мой пакет geonames - он читает данные JSON из geonames.org и создает фреймы данных.

Если его нет в CRAN, то в R-Forge. Я забыл ..

0 голосов
/ 10 февраля 2011

Запись файла Запись файла на клиенте проблематична для большинства браузеров из-за ограничений безопасности.Только в 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-текст / обычный текст)

...