2016-01-26 2 views
2

Я сталкиваюсь с тем, что считаю ошибкой. У меня есть массив объектов, возвращаемых с сервера. Однако, вытаскивая из них значения, я получаю несогласованные результаты. Каждый из этих элементов находятся в том же массиве ответа от сервера:Разбор JSON в быстром непоследовательности

Когда я пытаюсь вытащить значение этого одного он возвращается, как в Intquantity:

{ 
    address = "4040 MARKET ST RM 226"; 
    city = PHILADELPHIA; 
    ln = "AMOXICILLIN 500 MG CAPSULE"; 
    ndc = 57237003105; 
    npi = 1619912375; 
    "pharmacy_name" = "GRACE PHARMACY INC"; 
    phone = "(215)895-5594"; 
    price = "8.00"; 
    quantity = 500; 
    state = PA; 
    vendor = una; 
    zip = 19104; 
} 

Однако, когда я пытаюсь тянуть quantity из этого, он возвращается как String.

{ 
    address = "1826 Chestnut St # 30"; 
    brand = G; 
    city = Philadelphia; 
    distance = "0.06"; 
    latitude = "39.951747"; 
    ln = "AMOXICILLIN 500 MG CAPSULE"; 
    longitude = "-75.171154"; 
    "ncpdp_id" = 3969485; 
    ndc = 65862001705; 
    "pharmacy_hours_of_operation" = "Open 24 Hours"; 
    "pharmacy_name" = "CVS PHARMACY"; 
    phone = "(215)972-0909"; 
    price = "11.82"; 
    quantity = 30; 
    state = PA; 
    vendor = scriptsave; 
    zip = "19103-4902"; 
} 

Почему в мире это будет происходить? Оба объекта кажутся идентичными, за исключением некоторых дополнительных значений в одном.

===

сериализации JSON как это:

let searchResultsJSON: NSDictionary = try NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers) as! NSDictionary 

Схватив значения, как это:

quantity   = formDictionary["quantity"] as? Int 
    quantityString  = formDictionary["quantity"] as? String 

====

Вот JSON:

results =  (
       { 
      address = "4040 MARKET ST RM 226"; 
      city = PHILADELPHIA; 
      ln = "ESOMEPRAZOLE MAG DR 40 MG CAP"; 
      ndc = 13668015510; 
      npi = 1619912375; 
      "pharmacy_name" = "GRACE PHARMACY INC"; 
      phone = "(215)895-5594"; 
      price = "74.00"; 
      quantity = 1000; 
      state = PA; 
      vendor = una; 
      zip = 19104; 
     }, 
{ 
      address = "1700 Market St"; 
      brand = G; 
      city = Philadelphia; 
      distance = "0.22"; 
      latitude = "39.952981"; 
      ln = "ESOMEPRAZOLE MAG DR 40 MG CAP"; 
      longitude = "-75.168431"; 
      "ncpdp_id" = 3985059; 
      ndc = 00378235193; 
      "pharmacy_hours_of_operation" = "S(Clsd) M(8a-6p) T(8a-6p) W(8a-6p) T(8a-6p) F(8a-6p) S(9a-12p)"; 
      "pharmacy_name" = "PICKWICK PHARMACY INC"; 
      phone = "(215)563-4860"; 
      price = "241.23"; 
      quantity = 30; 
      state = PA; 
      vendor = scriptsave; 
      zip = "19103-3913"; 
     } 
    ); 

Так вот, quantity в первом возвращается как Int и как String во втором. Я начинаю думать, что это проблема на стороне сервера ...

===

Глядя на JSON в Chrome действительно подтверждает, что это ошибка кодирования с сервера. Благодаря @CouchDeveloper

enter image description here

+0

Какой код вы используя для получения величины количества? – Jeremiah

+0

Что вы используете для разбора JSON? –

+0

@TahTatsumoto Я обновил свой вопрос. Спасибо вам за быстрый ответ. – random

ответ

1

компании Apple API для JSONSerialization немного неприятный для использования в Swift. Если вы счастливы использовать сторонние фреймворки, то SwiftyJSON поможет с удобной обработкой JSON в безопасном типе. Он доступен как Cocoapod, используя Carthage или даже собственный менеджер пакетов Swift.

Вы можете убедиться, что вы получаете не-ноль Integer или String, объекты, например, так:

let name = json["name"].stringValue 
let number = json["number"].intValue 

Или вы можете обрабатывать несуществующие значения, дополнительными опциями, как так:

let name = json["name"].string 
let number = json["number"].int 
+0

Я дам ему шанс, если я не смогу заставить что-нибудь еще работать. Я ценю это!! – random