R में JSON फ़ाइल से डेटा आयात करना


166

क्या JSON फ़ाइल से R में डेटा आयात करने का कोई तरीका है? विशेष रूप से, फ़ाइल स्ट्रिंग फ़ील्ड्स, ऑब्जेक्ट्स और सरणियों के साथ JSON ऑब्जेक्ट्स की एक सरणी है। इस http://cran.r-project.org/web/packages/rjson/rjson.pdf से निपटने के तरीके के बारे में RJSON पैकेज बहुत स्पष्ट नहीं है ।


3
डुप्लिकेट: stackoverflow.com/questions/2061897/parse-json-with-r । यदि आपके पास एक विशिष्ट डेटा उदाहरण है, तो इससे मदद मिलेगी। अन्यथा डेटा की हेरफेर (जैसे एक लागू फ़ंक्शन या प्लायर के साथ) के साथ rjson आप क्या कर सकते हैं।
शेन

इस प्रश्न के समान: stackoverflow.com/questions/2260147/…
शेन

हाय शेन, ने RJSON का उपयोग करने की कोशिश की। मुझे ज्यादातर आवश्यक डेटा हेरफेर में दिलचस्पी है। यहां एक JSON फ़ाइल का एक उदाहरण है, जिसके साथ मैं काम कर रहा हूं। example.json: [{"विजेता": "68694999", "वोट": [{"ts": "थू मार 25 03:13:01 UTC 2010", "उपयोगकर्ता": {"नाम": "लामुर", "user_id": "68694999"}}, {"ts": "Thu Mar 25 03:13:08 UTC 2010", "उपयोगकर्ता": {"name": "Lamur", "user_id": "68694999"}} ], "लास्टवोट": {"टाइमस्टैम्प": 1269486788526, "उपयोगकर्ता": {"नाम": "लामुर", "user_id": "68694999"}}, "startPrice: 0}, ...]
user313967

1
एक सावधानी: यदि JSON फ़ाइल वास्तव में बड़ी है, तो जाहिरा तौर पर .so या .dll लाइब्रेरी इसे संसाधित नहीं करेगी। एक बेहतर प्रारूप नेटसीडीएफ है, लेकिन कुछ संगठनों को इस मुद्दे की जानकारी नहीं है।

जवाबों:


187

पहले rjsonपैकेज स्थापित करें :

install.packages("rjson")

फिर:

library("rjson")
json_file <- "http://api.worldbank.org/country?per_page=10&region=OED&lendingtype=LNX&format=json"
json_data <- fromJSON(paste(readLines(json_file), collapse=""))

अद्यतन: 0.2.1 संस्करण के बाद से

json_data <- fromJSON(file=json_file)

1
ध्यान दें कि संपादन पुस्तकालय के एक अद्यतन का संदर्भ दे रहा है, न कि आर। अद्यतन पिछले उदाहरण की अंतिम पंक्ति को बदलता है और आपको अभी भी ऊपर के रूप में पुस्तकालय में लोड करने की आवश्यकता है।
स्टीवन वाटरमैन

90

jsonliteJSON को डेटा फ़्रेम में आयात करेगा। यह वैकल्पिक रूप से नेस्टेड वस्तुओं को समतल कर सकता है। नेस्टेड एरेज़ डेटा फ्रेम होंगे।

> library(jsonlite)
> winners <- fromJSON("winners.json", flatten=TRUE)
> colnames(winners)
[1] "winner" "votes" "startPrice" "lastVote.timestamp" "lastVote.user.name" "lastVote.user.user_id"
> winners[,c("winner","startPrice","lastVote.user.name")]
    winner startPrice lastVote.user.name
1 68694999          0              Lamur
> winners[,c("votes")]
[[1]]
                            ts user.name user.user_id
1 Thu Mar 25 03:13:01 UTC 2010     Lamur     68694999
2 Thu Mar 25 03:13:08 UTC 2010     Lamur     68694999

पूर्ण रूप से! परिणामों को फ़िल्टर करने के बजाय सूचियों के बजाय डेटा के साथ काम करना वास्तव में आसान है!
एमएस बेरेंड्स

31

एक वैकल्पिक पैकेज RJSONIO है। नेस्टेड सूची में परिवर्तित करने के लिए, lapply मदद कर सकता है:

l <- fromJSON('[{"winner":"68694999",  "votes":[ 
   {"ts":"Thu Mar 25 03:13:01 UTC 2010", "user":{"name":"Lamur","user_id":"68694999"}},   
   {"ts":"Thu Mar 25 03:13:08 UTC 2010", "user":{"name":"Lamur","user_id":"68694999"}}],   
  "lastVote":{"timestamp":1269486788526,"user":
   {"name":"Lamur","user_id":"68694999"}},"startPrice":0}]'
)
m <- lapply(
    l[[1]]$votes, 
    function(x) c(x$user['name'], x$user['user_id'], x['ts'])
)
m <- do.call(rbind, m)

आपके उदाहरण में वोटों की जानकारी देता है।


1
x$user$name, x$user$user_idअब होना चाहिए x$user['name'], x$user['user_id']। इसके अलावा, m <- do.call(rbind, m)सूची को मैट्रिक्स में परिवर्तित करने का एक बेहतर तरीका हो सकता है।
जॅबम्स

क्या JSON के लिए ConvertToDataFrame फ़ंक्शन जैसा कुछ है (जैसे XML पैकेज के लिए है)?
userJT

16

यदि URL https है, जैसे अमेज़न S3 के लिए उपयोग किया जाता है, तो getURL का उपयोग करें

json <- fromJSON(getURL('https://s3.amazonaws.com/bucket/my.json'))

11
PSA: getURL RCurl pacakge में है।
मार्क मैकडॉनल्ड्स

1
इसके अलावा,Error in function (type, msg, asError = TRUE) : Protocol "s3" not supported or disabled in libcurl
d8aninja

3

पहले RJSONIO और RCurl पैकेज स्थापित करें:

install.packages("RJSONIO")
install.packages("(RCurl")

कंसोल में 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)


2

संकुल:

  • पुस्तकालय (httr)
  • पुस्तकालय (jsonlite)

मैं मुद्दों को डेटाफ़्रेम / सीएसवी में परिवर्तित कर रहा है। मेरे मामले के लिए मैंने किया:

Token <- "245432532532"
source <- "http://......."
header_type <- "applcation/json"
full_token <- paste0("Bearer ", Token)
response <- GET(n_source, add_headers(Authorization = full_token, Accept = h_type), timeout(120), verbose())
text_json <- content(response, type = 'text', encoding = "UTF-8")
jfile <- fromJSON(text_json)
df <- as.data.frame(jfile)

फिर df से csv तक।

यदि आवश्यक हो तो इस प्रारूप में इसे कई .csv में बदलना आसान होना चाहिए।

महत्वपूर्ण हिस्सा सामग्री समारोह होना चाहिए type = 'text'


1

आयात नहर पैकेज

library(httr)

Url प्राप्त करें

url <- "http://www.omdbapi.com/?apikey=72bc447a&t=Annie+Hall&y=&plot=short&r=json"
resp <- GET(url)

टेक्स्ट के रूप में सम्मान की प्रिंट सामग्री

content(resp, as = "text")

सम्मान की सामग्री प्रिंट करें

content(resp)

सामग्री का उपयोग करें () सम्मान की सामग्री प्राप्त करने के लिए, लेकिन इस बार एक दूसरे तर्क को निर्दिष्ट न करें। R अपने आप पता लगाते हैं कि आप JSON के साथ काम कर रहे हैं, और JSON को एक नामित R सूची में परिवर्तित करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.