Just a Computer Graphics Studio & My Life

[iOS] 讀取JSON檔

一個有料的APP,讀檔這回事在所難免,讀純文字檔還算容易,若這文字檔是JSON格式,學問可就多了!iOS 5.0之前,Objective-C並沒有標準的支援JSON格式的API,如今我們可以直接使用官方的方法,在效能上比第三方套件還要好,這一切都變得很簡單!

JSON全名是Javascript Object Notation,是非常light weight而且easy read的一種資料格式,早年常用於Javascript中,等到RESTFul Web Service大行其道時,JSON這種輕巧特質的資料格式也跟著被大量應用,目前主流的API幾乎都會提供JSON的格式。

現在只要很短的幾行code,就能順利把有著JSON格式的文字檔內容給讀進變數中。


/**
 Theme: Read JSON
 IDE: Xcode 5
 Language: Objective C
 Date: 103/03/21
 Author: HappyMan
 Blog: https://cg2010studio.wordpress.com/
 */
// 讀取快樂40週的描述 (json)
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Happy Weeks" ofType:@"txt"];
NSData *fileData = [NSData dataWithContentsOfFile:filePath];
detailArr = [NSJSONSerialization JSONObjectWithData:fileData options:kNilOptions error:nil];
// 讀取快樂40週的訊息 (txt)
filePath = [[NSBundle mainBundle] pathForResource:@"Happy Messages" ofType:@"txt"];
NSString *fileStr = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
sharingMessageArr = [fileStr componentsSeparatedByString:@"\r"];

我把檔案放在Resources資料夾中,名叫做Happy Weeks.txt。程式讀出來是個DSData,接著把它轉成JSON物件,通常會用Array或Dictionary去接住資料。

另外一個檔案是Happy Messages.txt,因不是JSON格式,可以把它裝到String中,再做剖析處理。

這裡節錄我檔案中的字串(JSON格式)……

[{“variationID":1,"week":1,"image":"1.jpg","title":"生命的前奏","babyVariation":"寶寶想要吃……","motherVariation":"媽媽變得更美。","nutritionRequirement":"營養要均衡啦。","tips":"這是提示喲~","sharingMessage":"可以分享喲!"},{“variationID":2,"week":2,"image":"2.jpg","title":"生命的前奏","babyVariation":"寶寶想要吃……","motherVariation":"媽媽變得更美。","nutritionRequirement":"營養要均衡啦。","tips":"這是提示喲~","sharingMessage":"可以分享喲!”}]

看起來似乎有點噁心,因為沒有排版,如果想要好觀察字串,可以參考我之前介紹的JSON線上解析器 (JSON Parser Online)。它就會變得討人喜愛喲~

[
{
"variationID":1,
"week":1,
"image":"1.jpg",
"title":"生命的前奏",
"babyVariation":"寶寶想要吃⋯⋯",
"motherVariation":"媽媽變得更美。",
"nutritionRequirement":"營養要均衡啦。",
"tips":"這是提示喲~",
"sharingMessage":"可以分享喲!"
},
{
"variationID":2,
"week":2,
"image":"2.jpg",
"title":"生命的前奏",
"babyVariation":"寶寶想要吃⋯⋯",
"motherVariation":"媽媽變得更美。",
"nutritionRequirement":"營養要均衡啦。",
"tips":"這是提示喲~",
"sharingMessage":"可以分享喲!"
}
]

其實原本計劃是從網路上呼叫RESTFul Web Service,來把資料顯示在APP上,現在變成要內建於APP中⋯⋯因為多變的客戶,讓工程師多才多藝XD~

註:第三方套件與官方套件相關

參考:iOS V.S JSONiOS5系統API和5個開源庫的JSON解析速度測試REST and RESTfull web service、WiKi – REST

廣告

發表留言

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

標籤雲

%d 位部落客按了讚: