2016-12-22 4 views
-1

Это мой json.file:SwiftyJson получить значение из JSON сложной структуры 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)") 

     } 

выход, все равно нулю или ноль кроме всех данных JSON (swiftyJsonVar). Как я могу получить значение date_range, drop_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) 
} 

Edit: Если у вас есть несколько объектов в корне, чем получить все dateRange и worker_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) 
       } 
     } 
    } 
} 
+0

Да, спасибо, я получил dateRange .., но если у меня много массива .. Вы видите, я обновил свой вопрос .. как я могу получить все drop_off_worker_id? –

+0

@ A.Shukri - 'for-loop'? Используйте это, чтобы перебирать ваши данные. –

+0

да я знаю for-loop .. но как я могу получить размер или длину для заданий или 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

'for (_, job) :(String, JSON) в swiftyJsonVar { // работа доступна здесь как словарь } ' – Sri

 Смежные вопросы

  • Нет связанных вопросов^_^