Phân tích cú pháp JSON với R


90

Tôi còn khá mới đối với R, nhưng càng sử dụng nó, tôi càng thấy nó thực sự mạnh hơn SAS hay SPSS. Theo tôi thấy, chỉ một trong những lợi ích chính là khả năng lấy và phân tích dữ liệu từ web. Tôi tưởng tượng điều này là có thể (và thậm chí có thể đơn giản), nhưng tôi đang tìm cách phân tích cú pháp dữ liệu JSON có sẵn công khai trên web. Tôi không phải là một lập trình viên, vì vậy bất kỳ sự trợ giúp và hướng dẫn nào bạn có thể cung cấp sẽ được đánh giá rất cao. Ngay cả khi bạn chỉ cho tôi một ví dụ làm việc cơ bản, tôi có thể làm việc thông qua nó.

Câu trả lời:


89

RJSONIO từ Omegahat là một gói khác cung cấp các phương tiện để đọc và ghi dữ liệu ở định dạng JSON.

rjson không sử dụng các phương thức S4 / S3 và do đó không thể mở rộng dễ dàng, nhưng vẫn hữu ích. Thật không may, nó không sử dụng các hoạt động vector hóa và vì vậy quá chậm đối với dữ liệu không tầm thường. Tương tự, để đọc dữ liệu JSON thành R, nó hơi chậm và do đó không mở rộng thành dữ liệu lớn, đây có phải là một vấn đề.

Cập nhật (Gói mới 2013-12-03):

jsonlite : Gói này là một nhánh của RJSONIOgói. Nó xây dựng trên trình phân tích cú pháp từ RJSONIOnhưng thực hiện một ánh xạ khác giữa các đối tượng R và chuỗi JSON. Mã C trong gói này hầu hết là từ RJSONIOGói, mã R đã được viết lại từ đầu. Ngoài các thay thế thả vào cho fromJSONtoJSON, gói này có các chức năng để tuần tự hóa các đối tượng. Hơn nữa, gói chứa rất nhiều bài kiểm tra đơn vị để đảm bảo rằng tất cả các trường hợp cạnh đều được mã hóa và giải mã nhất quán để sử dụng với dữ liệu động trong các hệ thống và ứng dụng.


3
Tôi tìm thấy sự so sánh này của rjson, RJSONIO, và jsonlite hữu ích
Eric

2
Liên kết so sánh ở trên đã chết. Là này liên kết có đúng không? (sự khác biệt là https)
woodvi

58

các jsonlite gói rất dễ dàng để sử dụng và cố gắng để chuyển đổi json vào khung dữ liệu.

Thí dụ:

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
Điều này cực kỳ dễ sử dụng cho những gì tôi cần. Cảm ơn bạn rất nhiều
Coder không xác định

tài liệu <- fromJSON (file = url); # nhưng yêu cầu hết thời gian chờ
EngrStudent

1
Thích cái này. Có vẻ tốt hơn nhiều so với sự lộn xộn do rjson tạo ra.
randominstanceOfLivingThing

1
Trừ khi định dạng json ban đầu đã được làm phẳng, jsonlitethì ít nhiều cũng hữu ích như một cái nĩa để ăn súp.
gented

19

Đây là ví dụ còn thiếu

library(rjson)
url <- 'http://someurl/data.json'
document <- fromJSON(file=url, method='C')

2
điều này làm việc với tôi nhưng bạn không muốn chuyển một chuỗi cho tên biến tệp như được hiển thị.
mrjrdnthms

4

Hàm fromJSON () trong RJSONIO, rjson và jsonlite không trả về data.frame 2D đơn giản cho các đối tượng json lồng nhau phức tạp.

Để khắc phục điều này bạn có thể sử dụng slimjson . Nó sử dụng một json và luôn trả về data.frame. Nó hiện không khả dụng trong CRAN, bạn có thể lấy nó tại đây: https://github.com/sailthru/tidyjson

Cập nhật: Sắp có sẵn trong cran, bạn có thể cài đặt trực tiếp bằng cách sử dụnginstall.packages("tidyjson")


2

Đối với bản ghi, rjson và RJSONIO thay đổi loại tệp, nhưng chúng không thực sự phân tích cú pháp. Ví dụ: tôi nhận được dữ liệu MongoDB xấu ở định dạng JSON, chuyển đổi dữ liệu đó bằng rjson hoặc RJSONIO, sau đó sử dụng không công bố và rất nhiều chỉnh sửa thủ công để thực sự phân tích cú pháp nó thành một ma trận có thể sử dụng được.


1

Hãy thử mã dưới đây bằng RJSONIO trong bảng điều khiển

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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.