2016-11-07 440 views
-3

我已經得到了下面的格式返回JSON的API端點:解析JSON響應3

[ 
    { 
    "id": "1", 
    "name": "John" 
    }, 
    { 
    "id": "2", 
    "name": "Jane" 
    }, 
    { 
    "id": "3", 
    "name": "Nick" 
    } 
] 

我想在斯威夫特3解析這一點,但我只能找到實例解析JSON格式化如下:

{ 
"blogs": [ 
    { 
     "needspassword": true, 
     "id": 73, 
     "url": "http://remote.bloxus.com/", 
     "name": "Bloxus test" 
    }, 
    { 
     "needspassword": false, 
     "id": 74, 
     "url": "http://flickrtest1.userland.com/", 
     "name": "Manila Test" 
    } 
], 
"stat": "ok" 
} 

,它有一個額外的水平高於我的。

所以,我見過的例子只是解析他們的數據,如jsonResponse["blogs"],我不能這樣做,因爲我的格式不同。

我該如何解析我得到的格式,或者如何返回更容易解析的格式?

任何建議表示感謝,謝謝!

回答

1

放置在網絡呼叫時,這將會對其進行解析。

 do { 
      let json = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions()) as! [[String : AnyObject]] 
      let firstPerson = json[0] 
      print(firstPerson) 
      let id = firstPerson["id"] as! String 
      print(id) 
      let name = firstPerson["name"] as! String 
      print(name) 
     } catch { 
      //handle error 
     } 

此外,我傾向於反對建議第三方庫,但SwiftyJSON是我做的一個例外。如果你想嘗試它,將它添加到您的POD文件:

莢SwiftyJSON」, '3.0.0'

文檔:https://github.com/SwiftyJSON/SwiftyJSON

編輯 - 接聽評論:

更換line:

if let id = firstPerson["id"] as? String { 
    print(id) 
} 

替換行(如果您需要保留該值):

var thisId: String? 
if let id = firstPerson["id"] as? String { 
    thisId = id 
} 
print(thisId ?? "") 
+0

嗯,我遲到了,但我想知道的東西。在這一行中:'let id = firstPerson [「id」] as! String'。如果'firstPerson [「id」]'值爲零,是不是會導致崩潰? – Rikh

+0

是的,我將在編輯中添加替換行 – Sethmr

-3

我真的不知道流暢但有可能是AJAX JSON編碼(服務器端,您json_encode陣列,並且客戶端你json_decode響應)

的想法是具有相同的格式編碼的等價和解碼數據

+1

永遠不要回答一個語言特定的問題開始您的答案 「我真的不知道_____」。花你的時間堆棧溢出檢查適用於你的知識庫的問題。 – Sethmr

2

您只需做到以下幾點:

let data = // Data received from WS 
    do { 
     let json = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions()) as? [[String : String]] 
     //json is now an array from dictionary matching your model 
    } 
    catch { 
     //handle error 
    }