2015-12-09 5 views
4

У меня естьКак преобразовать объект класса NSObject в JSON в Swift?

var contacts : [ContactsModel] = [] 

и

class ContactsModel: NSObject 
{ 
    var contactEmail : String? 
    var contactName : String? 
    var contactNumber : String? 
    var recordId : Int32? 
    var modifiedDate : String? 
} 

Теперь в контактах у меня 6 значений, как

enter image description here

Теперь я хочу, чтобы преобразовать контакты в JSON как я могу?

Я попытался

var jsonData: NSData? 
     do 
     { 
      jsonData = try NSJSONSerialization.dataWithJSONObject(contacts, options:NSJSONWritingOptions.PrettyPrinted) 
     } catch 
     { 
      jsonData = nil 
     } 
    let jsonDataLength = "\(jsonData!.length)" 

Но это происходит сбой приложения.

Моя проблема заключается в том, чтобы вручную конвертировать в словарь один за другим очень много времени, и это занимает более 5 минут для 6000 записей, поэтому вместо этого я хочу преобразовать непосредственно модель в JSON и отправить на сервер.

+1

конвертирование 6000 словарей a 6 записей не должно занимать 5 мин. вы делаете что-то не так. Но без вашего кода мы не сможем вам помочь. – vikingosegundo

+0

@ vikingosegundo плохо проверьте и обновите вас –

+0

Давайте проверим. Отправьте код. – vikingosegundo

ответ

2

Ваш собственный объект не может быть преобразован непосредственно в JSON. NSJSONSerialization Class Reference говорит:

Объект, который может быть преобразован в формат JSON должен обладать следующими свойствами:

  • Объект верхнего уровня является NSArray или NSDictionary.

  • Все объекты являются экземплярами NSString, NSNumber, NSArray, NSDictionary или NSNull.

  • Все словарные ключи являются экземплярами NSString.

  • Номера не NaN или бесконечность.

Вы можете преобразовать объект в Dictionary вручную или использовать некоторые библиотеки как SwiftyJSON, JSONModel или Mantle.

+0

Мой объект верхнего уровня - это массив, содержащий строки. Есть ли способ конвертировать без использования каких-либо из вышеперечисленных SwiftyJSON, JSONModel или Mantle. Моя проблема заключается в том, что при переводе вручную в словарь очень много времени требуется более 5 минут для 6000 записей. –

+1

Похоже, что с вашим кодом что-то не так. Преобразование 6000 объектов должно занимать всего миллисекунды, а не минуты. – Adam

+0

Да, вы правы. он занимает всего 2 секунды для цикла для 6000 записей. Я закончил свой вопрос, отправив 500 серверов на сервер. –

0

Вы можете использовать NSJSONSerialization для массива, когда массив содержит только кодируемого значения JSON (строка, число, словарь, массив, ноль)

сначала нужно создать объект JSON, то вы можете использовать его (код происходит сбой, потому что контакт не является объектом JSON!)

you can refere below link

https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSJSONSerialization_Class/#//apple_ref/doc/uid/TP40010946-CH1-SW9

2

Если вам просто нужен простой объект Swift для статической функции JSON без каких-либо наследований или зависимостей от NSObject или NS-типов напрямую. Проверьте:

https://github.com/peheje/JsonSerializerSwift

Полный отказ от ответственности. Я сделал это.Простое использование:

//Arrange your model classes 
class Object { 
    var id: Int = 182371823 
    } 
class Animal: Object { 
    var weight: Double = 2.5 
    var age: Int = 2 
    var name: String? = "An animal" 
    } 
class Cat: Animal { 
    var fur: Bool = true 
} 

let m = Cat() 

//Act 
let json = JSONSerializer.toJson(m) 

В настоящее время поддерживает стандартные типы, дополнительные стандартные типы, массивы, массивы nullables стандартных типов, массивов пользовательских классов, наследования, состав пользовательских объектов.

+1

Просто умный дует !!! Отличная работа. –