SwiftyJson从JSON的复杂结构中获取json的值

时间:2016-12-22 04:29:19

标签: ios json swift swifty-json

这是我的json.file:

[
{
"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)之外,输出全部为null或nil。如何获得date_rangedrop_off_worker_id的价值?我真的希望有人可以帮助我。我花了很多时间来解决它,但仍然无法解决它。

2 个答案:

答案 0 :(得分: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)
}

修改:如果您的根目录中有多个对象,请获取for循环中的所有dateRangeworker_id

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) 
              }
         }
    }
}

答案 1 :(得分: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)")
}