Разобрать JSON с помощью R

90

Я новичок в R, но чем больше его использую, тем больше я вижу, насколько он действительно эффективен по сравнению с SAS или SPSS. На мой взгляд, одним из основных преимуществ является возможность получать и анализировать данные из Интернета. Я полагаю, что это возможно (и, возможно, даже просто), но я хочу проанализировать данные JSON, которые общедоступны в Интернете. Я ни в коем случае не программист, поэтому мы будем очень признательны за любую помощь и инструкции. Даже если вы укажете мне базовый рабочий пример, я, вероятно, смогу его проработать.

Btibert3
источник

Ответы:

90

RJSONIO от Omegahat - еще один пакет, который предоставляет средства для чтения и записи данных в формате JSON.

rjson не использует методы S4 / S3 и поэтому не может быть легко расширяемым, но все же полезным. К сожалению, в нем не используются векторизованные операции, поэтому он слишком медленный для нетривиальных данных. Точно так же для чтения данных JSON в R это несколько медленно и поэтому не масштабируется до больших данных, если это будет проблемой.

Обновление (новый пакет 2013-12-03):

jsonlite : этот пакет является форком RJSONIOпакета. Он основан на синтаксическом анализаторе, RJSONIOно реализует другое сопоставление между объектами R и строками JSON. Код C в этом пакете в основном взят из RJSONIOпакета, код R был переписан с нуля. В дополнение к заменяющим элементам fromJSONи toJSONв пакете есть функции для сериализации объектов. Кроме того, пакет содержит множество модульных тестов, чтобы убедиться, что все граничные случаи последовательно кодируются и декодируются для использования с динамическими данными в системах и приложениях.

rcs
источник
3
Я нашел это сравнение rjson, RJSONIO и jsonlite полезным
Эрик
2
Ссылка для сравнения выше мертва. Является ли это правильная ссылка? (разница в https)
woodvi 09
58

Пакет jsonlite прост в использовании и пытается преобразовать json во фреймы данных.

Пример:

library(jsonlite)

# url with some information about project in Andalussia
url <- 'http://www.juntadeandalucia.es/export/drupaljda/ayudas.json'

# read url and convert to data.frame
document <- fromJSON(txt=url)
Joscani
источник
1
Это было невероятно просто для того, что мне было нужно. Большое спасибо
Unknown Coder
документ <- fromJSON (file = url); # но время ожидания запроса истекло
EngrStudent
1
Люблю это. Кажется, намного лучше, чем беспорядок, созданный rjson.
randominstanceOfLivingThing 05
1
Если исходный формат json уже не сплющен, jsonliteон более или менее полезен, как вилка, чтобы съесть суп.
gented
19

Вот недостающий пример

library(rjson)
url <- 'http://someurl/data.json'
document <- fromJSON(file=url, method='C')
Лит
источник
2
это сработало для меня, но вы не хотите передавать строку для имени переменной файла, как показано.
mrjrdnthms
4

Функция fromJSON () в RJSONIO, rjson и jsonlite не возвращает простой 2D data.frame для сложных вложенных объектов json.

Чтобы преодолеть это, вы можете использовать tidyjson . Он принимает json и всегда возвращает data.frame. В настоящее время он недоступен в CRAN, вы можете получить его здесь: https://github.com/sailthru/tidyjson

Обновление: tidyjson теперь доступен в кране, вы можете установить его напрямую, используяinstall.packages("tidyjson")

Pauljeba
источник
2

Для записи, rjson и RJSONIO действительно меняют тип файла, но на самом деле они не анализируют как таковые. Например, я получаю уродливые данные MongoDB в формате JSON, конвертирую их с помощью rjson или RJSONIO, затем использую unlist и тонны ручных исправлений, чтобы фактически проанализировать их в пригодную для использования матрицу.

Джейсон
источник
1

Попробуйте код ниже, используя 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)
Моби М
источник