Analizar JSON con R

90

Soy bastante nuevo en R, pero cuanto más lo uso, más veo lo poderoso que es realmente sobre SAS o SPSS. Solo uno de los principales beneficios, como yo los veo, es la capacidad de obtener y analizar datos de la web. Imagino que esto es posible (y tal vez incluso sencillo), pero estoy buscando analizar datos JSON que están disponibles públicamente en la web. No soy un programador en absoluto, por lo que cualquier ayuda e instrucción que pueda proporcionar será muy apreciada. Incluso si me indica un ejemplo de trabajo básico, probablemente pueda resolverlo.

Btibert3
fuente

Respuestas:

89

RJSONIO de Omegahat es otro paquete que proporciona facilidades para leer y escribir datos en formato JSON.

rjson no utiliza métodos S4 / S3 y, por lo tanto, no es fácilmente extensible, pero sigue siendo útil. Desafortunadamente, no utiliza operaciones vectorizadas y, por lo tanto, es demasiado lento para datos no triviales. De manera similar, para leer datos JSON en R, es algo lento y, por lo tanto, no se escala a datos grandes, en caso de que esto sea un problema.

Actualización (nuevo paquete 2013-12-03):

jsonlite : este paquete es una bifurcación del RJSONIOpaquete. Se basa en el analizador de RJSONIOpero implementa una asignación diferente entre los objetos R y las cadenas JSON. El código C de este paquete es principalmente del RJSONIOpaquete, el código R se ha reescrito desde cero. Además de los reemplazos directos para fromJSONy toJSON, el paquete tiene funciones para serializar objetos. Además, el paquete contiene una gran cantidad de pruebas unitarias para garantizar que todos los casos extremos estén codificados y decodificados de forma coherente para su uso con datos dinámicos en sistemas y aplicaciones.

rcs
fuente
3
Encontré esta comparación de rjson, RJSONIO y jsonlite útil
Eric
2
El enlace de comparación anterior está muerto. ¿Es este el enlace correcto? (la diferencia es https)
woodvi
58

El paquete jsonlite es fácil de usar e intenta convertir json en marcos de datos.

Ejemplo:

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
fuente
1
Esto fue increíblemente fácil de usar para lo que necesitaba. Muchas gracias
Unknown Coder
documento <- fromJSON (archivo = url); #pero la solicitud se agota
EngrStudent
1
Me gusta esto. Parece mucho mejor que el desorden creado por rjson.
randominstanceOfLivingThing
1
A menos que el formato json original ya esté aplanado, jsonlitees más o menos tan útil como un tenedor para comer sopa.
Gented
19

Aquí está el ejemplo que falta

library(rjson)
url <- 'http://someurl/data.json'
document <- fromJSON(file=url, method='C')
Leeth
fuente
2
esto funcionó para mí, pero no desea pasar una cadena para el nombre de la variable de archivo como se muestra.
mrjrdnthms
4

La función fromJSON () en RJSONIO, rjson y jsonlite no devuelve un data.frame 2D simple para objetos json anidados complejos.

Para superar esto, puede usar tidyjson . Toma un json y siempre devuelve un data.frame. Actualmente no está disponible en CRAN, puede obtenerlo aquí: https://github.com/sailthru/tidyjson

Actualización: tidyjson ahora está disponible en cran, puede instalarlo directamente usandoinstall.packages("tidyjson")

pauljeba
fuente
2

Para el registro, rjson y RJSONIO cambian el tipo de archivo, pero en realidad no lo analizan per se. Por ejemplo, recibo datos desagradables de MongoDB en formato JSON, los convierto con rjson o RJSONIO, luego uso unlist y toneladas de corrección manual para analizarlos en una matriz utilizable.

Jason
fuente
1

Pruebe el siguiente código usando RJSONIO en la consola

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)
Moby M
fuente