Parse JSON dengan R

90

Saya cukup baru mengenal R, tetapi semakin sering menggunakannya, semakin saya melihat betapa hebatnya itu dibandingkan SAS atau SPSS. Salah satu manfaat utama, menurut saya, adalah kemampuan untuk mendapatkan dan menganalisis data dari web. Saya membayangkan ini mungkin (dan bahkan mungkin langsung), tetapi saya ingin mengurai data JSON yang tersedia untuk umum di web. Saya bukan seorang programmer, jadi bantuan dan instruksi apa pun yang dapat Anda berikan akan sangat dihargai. Bahkan jika Anda menunjukkan kepada saya contoh kerja dasar, saya mungkin bisa mengatasinya.

Btibert3
sumber

Jawaban:

90

RJSONIO dari Omegahat merupakan paket lain yang menyediakan fasilitas untuk membaca dan menulis data dalam format JSON.

rjson tidak menggunakan metode S4 / S3 sehingga tidak mudah dikembangkan, tetapi masih berguna. Sayangnya, ini tidak menggunakan operasi vektor sehingga terlalu lambat untuk data non-sepele. Demikian pula, untuk membaca data JSON ke R, ini agak lambat dan tidak menskalakan ke data besar, jika ini menjadi masalah.

Pembaruan (Paket baru 2013-12-03):

jsonlite : Paket ini adalah cabang dari RJSONIOpaket. Itu dibangun di atas parser RJSONIOtetapi mengimplementasikan pemetaan yang berbeda antara objek R dan string JSON. Kode C dalam paket ini sebagian besar berasal dari RJSONIOPackage, kode R telah ditulis ulang dari awal. Selain drop-in pengganti untuk fromJSONdan toJSON, paket tersebut memiliki fungsi untuk membuat serial objek. Selain itu, paket tersebut berisi banyak pengujian unit untuk memastikan bahwa semua kasus tepi dikodekan dan didekodekan secara konsisten untuk digunakan dengan data dinamis dalam sistem dan aplikasi.

rcs
sumber
3
Saya menemukan perbandingan rjson, RJSONIO, dan jsonlite ini membantu
Eric
2
Tautan perbandingan di atas sudah mati. Apakah ini tautan yang benar? (perbedaannya adalah https)
woodvi
58

The jsonlite paket mudah untuk digunakan dan mencoba untuk mengkonversi json menjadi frame data.

Contoh:

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
sumber
1
Ini sangat mudah digunakan untuk apa yang saya butuhkan. Terima kasih banyak
Unknown Coder
dokumen <- fromJSON (file = url); #tapi waktu permintaan habis
EngrStudent
1
Suka ini. Sepertinya jauh lebih baik daripada kekacauan yang dibuat oleh rjson.
randominstanceOfLivingThing
1
Kecuali kalau format json aslinya sudah diratakan, jsonlitekurang lebih berguna sebagai garpu makan sup.
Tuan
19

Inilah contoh yang hilang

library(rjson)
url <- 'http://someurl/data.json'
document <- fromJSON(file=url, method='C')
Leeth
sumber
2
ini berfungsi untuk saya tetapi Anda tidak ingin meneruskan string untuk nama variabel file seperti yang ditunjukkan.
mrjrdnthms
4

Fungsi fromJSON () di RJSONIO, rjson dan jsonlite tidak mengembalikan data.frame 2D sederhana untuk objek json bersarang yang kompleks.

Untuk mengatasinya anda bisa menggunakan tidyjson . Dibutuhkan dalam json dan selalu mengembalikan data.frame. Saat ini tidak tersedia di CRAN, Anda bisa mendapatkannya di sini: https://github.com/sailthru/tidyjson

Pembaruan: tidyjson sekarang tersedia di cran, Anda dapat menginstalnya langsung menggunakaninstall.packages("tidyjson")

pauljeba
sumber
2

Sebagai catatan, rjson dan RJSONIO memang mengubah jenis file, tetapi mereka tidak benar-benar mengurai. Misalnya, saya menerima data MongoDB yang jelek dalam format JSON, mengonversinya dengan rjson atau RJSONIO, kemudian menggunakan unlist dan banyak koreksi manual untuk benar-benar menguraikannya menjadi matriks yang dapat digunakan.

Jason
sumber
1

Coba kode di bawah ini menggunakan RJSONIO di konsol

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
sumber