2015-07-31 2 views
-2

У меня есть два массива:Преобразование быстрых массивов в объект JSON

let value = [41, 42, 45] ... 
let date = [NSDate1, NSDate2, NSDate3] ... 

мне нужно сохранить данные в виде объекта JSON на нашем MongoDB на сервере. Я протестировал с образцом объекта, отформатированного ниже, и он работал, как ожидалось. Как я могу переформатировать свои массивы в этот формат эффективно в быстром/объективном c?

let jsonObject = [ 
["date" : "2014/01/01", "value" : "41"], 
["date" : "2014/01/02", "value" : "42"], 
["date" : "2014/01/03", "value" : "45"]] 

Любая помощь будет очень признательна! Спасибо !

+0

NSJSONСериализация может быть? https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSJSONSerialization_Class/index.html –

+0

Я не думаю, что там где-то там сказано, как объединить два массива в объект json. – KML

+0

создать NSDictionary с обоими массивами, а затем преобразовать его в JSON с NSJSONSerialization –

ответ

4

Вы можете закрепить массивы, а затем отобразить их в словаре.

Вы можете запустить этот код на детской площадке в качестве примера.

let value = [41, 42, 45] 
let date = [NSDate(), NSDate(), NSDate()] 

let zippedArray = Array(zip(value, date)) 

let jsonObject = zippedArray.map({ (tuple: (value: Int, date: NSDate)) in 
    return [ 
     "value" :  String(tuple.value), 
     "date" :  String(_cocoaString: tuple.date) // You would probably want to use a method here that gives you the string in the format you want 
    ] 
}) 
+0

Это разбило приложение! Завершение приложения из-за неперехваченного исключения «NSInvalidArgumentException», причина: '- [__ NSDate length]: непризнанный селектор, отправленный экземпляру 0x17001aa10' – KML

+0

Возможно, вам понадобится метод удобства NSDate, чтобы преобразовать даты в нужный формат строки, а не использовать Строковая функция. –

+0

Да, это работает, если я сделаю дату какой-нибудь строкой! Как я могу сделать NSDate() в String? формат, который не разбивает приложение? – KML

3

Вы можете попробовать это:

let value = [41, 42, 45] 
let date = [NSDate(), NSDate(), NSDate()] 

let jsonArray = NSMutableArray() 

let dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "YYYY/MM/dd" 

for i in 0..<value.count { 

    var jsonObject = Dictionary<String, String>() 

    let dateString = dateFormatter.stringFromDate(date[i]) 

    jsonObject["date"] = dateString 
    jsonObject["value"] = value[i].description 

    jsonArray.addObject(jsonObject) 

} 

println(jsonArray) 

var error: NSError? = nil; 
let jsonData: NSData = NSJSONSerialization.dataWithJSONObject(jsonArray, options: nil, error: &error)! 

надеюсь, что это помогло.

+0

Сбой приложения: *** Завершение приложения из-за неперехваченного исключения «NSInvalidArgumentException», причина: «Недопустимый тип в записи JSON (NSConcreteData)» – KML

+0

Это вывод с консоли, первое, что я заметил, это точки с запятой .. и затем равные знаки, она должна быть толстой кишки между ключом и значением ( { дата = "2015/08/01"; значение = 41; }, { дата = "2015/08/01"; значение = 42; }, { дата = "2015/08/01"; значение = 45; } ) – KML

+0

Вы используете [email protected] – Firas

0

Я объединил оба подхода, и он сработал. Спасибо :-) Теперь я могу спать .... 00:33 am Большое спасибо

func zipArrays()-> NSArray{ 
    let dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "YYYY/MM/dd" 
    let zippedArray = Array(zip(value, date)) 

    let jsonObject = zippedArray.map({ (tuple: (value: Int, date: NSDate)) in 
     return [ 
      "date" :  String(_cocoaString: dateFormatter.stringFromDate(tuple.date)), 
      "value" :  String(tuple.value) 
     ] 
    }) 

    return jsonObject 
} 
+0

выход из метеора (MongoDB) оболочки: $ HealthData.findOne() {_id: 'LuYT27BsdGLuWNShf', объект: [{дата: '2015/08/01' , значение: '41'}, {дата: '2015/08/01', значение: '42'}, {дата: '2015/08/01', значение: '43'}]} – KML

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