2016-12-22 121 views
-1

這是我json.file的複雜結構得到JSON的價值:SwiftyJson從JSON

[ 
{ 
"date_range": "2016-11-01-2016-12-31", 
"order_status_id": 3, 
"jobs": [ 
    { 
    "date": "2016-11-14", 
    "job": [ 
     { 
     "id": 143608, 
     "pickup_worker_id": null, 
     "drop_off_worker_id": 57 
     } 
      ] 
    } 
     ] 
} 

{ 
    "date_range": "2016-11-01-2016-12-31", 
    "order_status_id": 2, 
    "jobs": [ 
     { 
      "date": "2016-11-16", 
      "job": [ 
      { 
       "id": 143238, 
       "pickup_worker_id": null, 
       "drop_off_worker_id": 12 
       }, 
      { 
       "id": 13218, 
       "pickup_worker_id": null, 
       "drop_off_worker_id": 42 
       } 
       ] 
     }, 
     { 
      "date": "2016-11-19", 
      "job": [ 
      { 
       "id": 141238, 
       "pickup_worker_id": null, 
       "drop_off_worker_id": 12 
       } 

       ] 
      } 


      ] 
    } 
] 

這是我爲swiftyjson代碼:

Alamofire.request(Constants.web_api+api_get_orders, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: Constants.headers).responseJSON { (responseData) -> Void in 
     if((responseData.result.value) != nil) { 
      let swiftyJsonVar = JSON(responseData.result.value!) 
      print("All Data JSON \(swiftyJsonVar)") 

      print("date range1\(swiftyJsonVar["date_range"])") 
      print("date range2\(swiftyJsonVar["date_range"].stringValue)") 
      print("jobs1 \(swiftyJsonVar["jobs"].arrayObject)") 
      print("jobs2 \(swiftyJsonVar["jobs"].array)") 
      print("jobs3 \(swiftyJsonVar["jobs"])") 
      print("jobs date \(swiftyJsonVar["jobs"]["date"].stringValue)") 
      print("jobs date \(swiftyJsonVar["jobs"]["job"]["drop_off_worker_id"].stringValue)") 

     } 

輸出,全部爲空或爲零All Data JSON除外(swiftyJsonVar)。我怎樣才能得到date_rangedrop_off_worker_id的價值?我真的希望有人能幫助我。我花了很多時間來解決它,但仍然無法解決它。

+1

爲什麼不使用ObjectMapper進行更多結構化/模塊化編程? –

+0

ObjectMapper?你能給我關於這個的鏈接嗎? –

+0

https://github.com/Hearst-DD/ObjectMapper –

回答

0

你的JSON響應是Array而不是Dictionary,所以你需要訪問它的第一個對象來獲得你想要的細節。

if let dateRange = swiftyJsonVar[0]["date_range"].string { 
    print(dateRange) 
} 
if let worker_id = swiftyJsonVar[0]["jobs"][0]["job"][0]["drop_off_worker_id"].int { 
    print(worker_id) 
} 

編輯:如果您有根多的對象比得到的所有dateRangeworker_id for循環。

for subJson in swiftyJsonVar.array { 

    if let dateRange = subJson["date_range"].string { 
     print(dateRange) 
    } 
    for jobsJson in subJson["jobs"].array { 
     for jobJson in jobsJson["job"].array { 
       if let worker_id = jobJson["drop_off_worker_id"].int { 
        print(worker_id) 
       } 
     } 
    } 
} 
+0

是的,謝謝我得到了dateRange ..但是如果我有很多數組..你看,我更新了我的問題..我怎麼能得到所有的drop_off_worker_id? –

+0

@ A.Shukri - 'for-loop'?用它來迭代你的數據。 –

+0

是的,我知道for循環..但我怎麼能得到大小或長度的工作或dateRange? –

0

請嘗試,通過引用數組中的元素的索引。

Alamofire.request(Constants.web_api+api_get_orders, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: Constants.headers) 
    .responseJSON { (responseData) -> Void in 
    if((responseData.result.value) != nil) { 
    let swiftyJsonVar = JSON(responseData.result.value!) 
    print("All Data JSON \(swiftyJsonVar)") 

    print("date range1\(swiftyJsonVar[0]["date_range"])") 
    print("date range2\(swiftyJsonVar[0]["date_range"].stringValue)") 
    print("jobs1 \(swiftyJsonVar[0]["jobs"].arrayObject)") 
    print("jobs2 \(swiftyJsonVar[0]["jobs"].array)") 
    print("jobs3 \(swiftyJsonVar[0]["jobs"])") 
    print("jobs date \(swiftyJsonVar[0]["jobs"]["date"].stringValue)") 
    print("jobs date \(swiftyJsonVar[0]["jobs"]["job"]["drop_off_worker_id"].stringValue)") 
} 
+0

謝謝..我怎麼能得到長度或大小或工作?如果看看我的json,有兩個工作... –

+0

,因爲我需要得到所有的drop_off_worker_id .. –

+0

用於(_,job):(字符串,JSON)在swiftyJsonVar { //作業在這裏可以作爲字典 }' – Sri