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.

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.


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)

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')

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")


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.


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)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.