แยกวิเคราะห์ JSON ด้วย R


91

ฉันค่อนข้างใหม่สำหรับ R แต่ยิ่งใช้มากเท่าไหร่ฉันก็ยิ่งเห็นว่ามันทรงพลังมากแค่ไหนเมื่อเทียบกับ SAS หรือ SPSS ประโยชน์ที่สำคัญอย่างหนึ่งที่ฉันเห็นคือความสามารถในการรับและวิเคราะห์ข้อมูลจากเว็บ ฉันคิดว่าสิ่งนี้เป็นไปได้ (และอาจจะตรงไปตรงมา) แต่ฉันต้องการแยกวิเคราะห์ข้อมูล JSON ที่เปิดเผยต่อสาธารณะบนเว็บ ฉันไม่ได้เป็นโปรแกรมเมอร์ แต่อย่างใดดังนั้นความช่วยเหลือและคำแนะนำใด ๆ ที่คุณสามารถให้ได้จะได้รับการชื่นชมอย่างมาก แม้ว่าคุณจะชี้ให้ฉันเห็นตัวอย่างการทำงานขั้นพื้นฐาน แต่ฉันก็สามารถผ่านมันไปได้

คำตอบ:


91

RJSONIOจาก Omegahat เป็นอีกแพ็คเกจหนึ่งที่มีสิ่งอำนวยความสะดวกสำหรับการอ่านและเขียนข้อมูลในรูปแบบ JSON

rjsonไม่ได้ใช้วิธี S4 / S3 ดังนั้นจึงไม่สามารถขยายได้ในทันที แต่ก็ยังมีประโยชน์ น่าเสียดายที่มันไม่ได้ใช้การดำเนินการแบบเวกเตอร์ดังนั้นจึงช้าเกินไปสำหรับข้อมูลที่ไม่สำคัญ ในทำนองเดียวกันสำหรับการอ่านข้อมูล JSON เป็น R มันค่อนข้างช้าและไม่ได้ปรับขนาดเป็นข้อมูลขนาดใหญ่สิ่งนี้ควรเป็นปัญหา

อัปเดต (แพ็คเกจใหม่ 2013-12-03):

jsonlite : แพ็คเกจนี้เป็นทางแยกของRJSONIOแพ็คเกจ สร้างจากตัวแยกวิเคราะห์RJSONIOแต่ใช้การแม็ปที่แตกต่างกันระหว่างวัตถุ R และสตริง JSON รหัส C ในแพ็คเกจนี้ส่วนใหญ่มาจากRJSONIOแพ็คเกจรหัส R ถูกเขียนใหม่ตั้งแต่ต้น นอกเหนือจากการแทนที่แบบดรอปอินสำหรับfromJSONและtoJSONแพคเกจยังมีฟังก์ชันในการทำให้วัตถุเป็นอนุกรม นอกจากนี้แพ็คเกจยังมีการทดสอบหน่วยจำนวนมากเพื่อให้แน่ใจว่า edge case ทั้งหมดได้รับการเข้ารหัสและถอดรหัสอย่างสม่ำเสมอเพื่อใช้กับข้อมูลไดนามิกในระบบและแอปพลิเคชัน


3
ฉันพบว่าการเปรียบเทียบ rjson, RJSONIO และ jsonlite เป็นประโยชน์
Eric

2
ลิงค์เปรียบเทียบข้างบนตายแล้ว คือนี้การเชื่อมโยงที่ถูกต้องหรือไม่ (ความแตกต่างคือ https)
woodvi

60

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)

1
สิ่งนี้ใช้งานง่ายอย่างเหลือเชื่อสำหรับสิ่งที่ฉันต้องการ ขอบคุณมาก
Unknown Coder

เอกสาร <- fromJSON (file = url); # แต่ขอหมดเวลา
EngrStudent

1
รักสิ่งนี้. ดูเหมือนจะดีกว่าความยุ่งเหยิงที่สร้างโดย rjson
randominstanceOfLivingThing

1
เว้นแต่ว่ารูปแบบ json ดั้งเดิมจะแบนอยู่แล้วjsonliteจะมีประโยชน์มากหรือน้อยพอ ๆ กับส้อมกินซุป
เสนอ

19

นี่คือตัวอย่างที่หายไป

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

2
สิ่งนี้ใช้ได้ผลสำหรับฉัน แต่คุณไม่ต้องการส่งสตริงสำหรับชื่อตัวแปรไฟล์ดังที่แสดง
mrjrdnthms

4

ฟังก์ชัน fromJSON () ใน RJSONIO, rjson และ jsonlite จะไม่ส่งคืน data.frame แบบ 2D แบบธรรมดาสำหรับวัตถุ json ที่ซ้อนกันที่ซับซ้อน

ที่จะเอาชนะนี้คุณสามารถใช้tidyjson ใช้เวลาใน json และส่งคืน data.frame เสมอ ขณะนี้ยังไม่มีให้บริการใน CRAN คุณสามารถรับได้ที่นี่: https://github.com/sailthru/tidyjson

อัปเดต: tidyjson มีให้บริการใน cran แล้วคุณสามารถติดตั้งได้โดยตรงโดยใช้install.packages("tidyjson")


2

สำหรับเร็กคอร์ด rjson และ RJSONIO จะเปลี่ยนประเภทไฟล์ แต่ไม่ได้แยกวิเคราะห์ตามความเป็นจริง ตัวอย่างเช่นฉันได้รับข้อมูล MongoDB ที่น่าเกลียดในรูปแบบ JSON แปลงด้วย rjson หรือ RJSONIO จากนั้นใช้การแก้ไขด้วยตนเองที่ไม่อยู่ในรายการและจำนวนมากเพื่อแยกวิเคราะห์เป็นเมทริกซ์ที่ใช้งานได้จริง


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)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.