#註: 本篇筆記諸多內容直接紀錄課程原文,而本文也僅整理資訊之用途。
課程連結 : R語言翻轉教室
RDataEngineer-03-JSON
JSON (JavaScript Object Notation) 在網際網路上已經是最廣泛使用的格式之一,尤其常見於各種傳遞資料的API之中。舉例來說,台北的Youbike的API資料、甚至是Facebook上的API資料,都是以JSON格式傳輸。
#JSON物件範例 - 臉書錯誤訊息
{
"error": {
"message": "An active access token must be used to query information about the current user.",
"type": "OAuthException",
"code": 2500,
"fbtrace_id": "EkWgGmWkEt2"
}
}
從畫面上,我們可以簡單看到整個訊息的前後分別有`{`和`}`,這代表整個訊息就是一個JSON物件。每個物件中則包含一對一對的「名稱」與「值」的組合。舉例來說,整個訊息的JSON物件中,只有一對名稱與值的組合:名稱是:"error",值則是另一個JSON物件。
主要使用R套件 : jsonlite
把一個JSON文件轉換成R 的list
在Vignettes的第一段很清楚的說明jsonlite的功能:讓R 和JSON物件之間能在不損失資訊的狀況下轉換。而作者也馬上給了一個簡單的範例:使用jsonlite提供的`toJSON`和`fromJSON`,可以完整的還原一個R的data.frame。這種方式,是驗證轉換過程中是否有遺失資訊的一種方式。
範例中所使用的`all.equal`是一種用來驗證程式碼正確性時,常常使用的工具。它會一字不漏的比對兩個R 物件,必需要一模一樣才會回傳`TRUE`,否則會回報不一致的理由。
文件的第二段描述jsonlite在把JSON物件轉換成R 物件時,會自動嘗試把JSON物件轉換成更適合的物件。舉例來說,`["Amsterdam", "Rotterdam", "Utrecht", "Den Haag"]`如果直接轉換,可能會變成一個長度為4 的list,而每個元素都是長度為1 的字串向量。
#範例:
fromJSON( 物件 , simplifyVector = TRUE )
當simplifyVector = TRUE ,JSON物件啟用自動轉換。
jsonlite的vignettes後面的段落仔細的介紹處理JSON的細節,建議是先把作者提供的vignettes讀過以後,能省掉很多找bug的 時間。
#作業:
1.list清單中呼叫其迭代之清單list,可使用連續$方式直接呼叫,如下
youbike1$result$results$sbi
#後記 :
在安裝套件過程中,不知名原因無法順利安裝jsonlite套件,這時還是只能依靠Google大神的幫助,這次十足感受到直接使用英文搜尋問題的效率。未來遇到程式問題,直接使用英文描述問題或複製貼上錯誤訊息,都能有效率在社群找到解答。 有時候會不自覺先搜尋中文訊息,但其實英語系的搜尋結果更多、社群互動更熱絡,自然很容易得到解答。
以下紀錄搜尋要訣:
1.直接使用英文描述問題或複製貼上錯誤訊息
2.首選社群討論串、如stack overflow等討論串
3.直接觀看官方文件、套件說明文件
4.社群發問要點 :
4.1.記錄自己的R版本
sessioninfo()
4.2 紀錄使用套件版本
packageVersion()
4.3說明使用作業系統環境
5.查詢封包是否有長文件說明(以網頁的形式,而非pdf的形式呈現給使用者。)
vignette()
沒有留言:
張貼留言