Swift原生JSON解析和第三方解析對比

2021-07-09 06:05:37 字數 1507 閱讀 2449

// jsonstring

, ,]}

}}

let jsonstring = //...

let json: anyobject = try! nsjsonserialization.jsonobjectwithdata(

jsonstring.datausingencoding(nsutf8stringencoding, allowlossyconversion: true)!,

options: )

我們如果想要訪問 menu 裡的 popup 中 第乙個 menuitem 的 value 值的話,最正規的情況下,需要寫這樣的**:

if

let jsondic = json as? nsdictionary }}

}}}}

}// 輸出 new

什麼?你難道把這段**看完了?我都不忍心寫下去了...如果你真的想要堅持這麼做的話,我只能說呵呵,並且祝你好運了。

當然,在 swift 1.2 中,我們可以在同乙個if let語句中進行 unwrap,這樣會比原來稍好一些,但是依舊十分麻煩:

if

let jsondic = json as? nsdictionary,

menu = jsondic["menu"] as? [string: anyobject],

popup = menu["popup"],

popupdic = popup as? [string: anyobject],

menuitems = popupdic["menuitem"],

menuitemsarr = menuitems as? [anyobject],

item0 = menuitemsarr[0] as? [string: anyobject],

value = item0["value"]

那麼,我們應該怎麼做呢?在上面的**中,最大的問題在於我們為了保證型別的正確性,做了太多的轉換和判斷。我們並沒有利用乙個有效的 json 容器總應該是字典或者陣列這個有用的特性,而導致每次使用下標取得的值都是需要轉換的anyobject。如果我們能夠過載下標的話,就可以通過下標的取值配合arraydictionay的 optional binding 來簡單地在 json 中取值。鑑於篇幅,我們在這裡不給出具體的實現。感興趣的讀者可以移步看看 json-swift 或者 swiftyjson 這樣的專案,它就使用了過載下標訪問的方式簡化了 json 操作。使用這個工具,上面的訪問可以簡化為下面的型別安全的樣子:

// 使用 swiftjson

iflet value = json(json)["menu"]["popup"]["menuitem"][0]["value"].string

這樣就簡單多了。

Swift解析JSON資料

從ios開發的角度來說,json更多的可以看作是一種包含很多鍵值對的物件。首先我從www.k780.com這個 中得到乙個實時天氣情況介面。這樣顯得清晰多了。那麼如何在swift工程裡對這個url進行解析呢?對json解析,我們需要用到nsjsonserialization。我現在用的是xcode7...

json原生解析以及Gson解析陣列

private handler handler new handler 對應的,解析出來是物件 一種是 對應的,這種是陣列或者集合 1.集合或者資料在 json 原生解析 使用的 jsonarray 這個類.對應的在原聲解析裡面是 jsonobject 2.使用 gson 解析陣列格式的 json ...

原生json解析庫手解JSON資料

我先看一下示例介面 我們看到我需要的video uri在很多層下面,所以我要用手將每一層撥開 洋蔥的bgm響起 我將網路請求的來的資料每層每層的撥開,再存入jsonarray中 jsonobject jsonobject new jsonobject respone jsonobject jsono...