2015-11-27 6 views
-1

Я создаю приложение рисования в Swift, которое можно перерисовать на холсте для HTML. Просто прототип. Мне нужно получить эти данные в формате JSON в моей базе данных. Я организовал все в массивах и словарях.Как вставить Array внутри Dicionary в Swift

Как я могу генерировать что-то вроде этого:

{ 
    "data": [ 

    { 

    "width": 150, 

    "height": 200, 

    "x": 45, 

    "y": 65, 

    "id": "line4" 

    }, 

    { 

    "width": 150, 

    "height": 200, 

    "x": 45, 

    "y": 65, 

    "id": "Shape1" 

    }, 

    { 

    "width": 150, 

    "height": 200, 

    "x": 45, 

    "y": 65, 

    "id": "line3" 

    }, 

    { 

    "width": 350, 

    "height": 400, 

    "x": 45, 

    "y": 65, 

    "id": "line2" 

    } 

    ] 

    } 

Используя Arrays and Dicionaries (and/or Structs), а затем превращаются в Json.

Я попытался создать один словарь в массиве в другом словаре. Данные динамические, то есть большая проблема.

помощь будет оценена

+1

Итак ... ваш вопрос заключается в том, как представить структуру JSON в статически типизированном Swift? – GingerPlusPlus

ответ

1
var arr: Array<Any> = [] 
var dict1: Dictionary<String,Any> = [:] 
var dict: Dictionary<String,Any> = [:] 

arr = ["text",1,true] 
dict1["arr"] = arr 
dict["dict1"] = dict1 

// 

var dict2: Dictionary<String,Any> = [:] 
dict["dict2"] = dict2 

print(dict) // ["dict2": [:], "dict1": ["arr": ["text", 1, true]]] 

withUnsafeMutablePointer(&dict["dict2"]) { (pdict2) -> Void in 
    var pd = UnsafeMutablePointer<Dictionary<String,Any>>(pdict2) 
    pd.memory.updateValue(arr, forKey: "arr2") 
} 

print(dict) // ["dict2": ["arr2": ["text", 1, true]], "dict1": ["arr": ["text", 1, true]]] 

вы можете это сделать. Я не рекомендую вам этот подход. вы лучше перепроектируете идею

0

Вот он говорит, как сделать это в Objective-C. Вы можете перенести это решение в Swift.

Generate JSON string from NSDictionary in iOS

+0

Проблема заключается в вставке словаря в массив, внутри другого Словаря. Но танки для вашего ответа. – James

+0

Вам нужен быстрый код? 'var arr: [[ключ: значение]]; // ваш array' 'вар dict1: [ключ: значение] // Ваш dictionary' ' arr.append (dict1) // вставить словарь в array' 'уаг dict2: [ключ: [[ключ : value]]] // этот словарь сохранит ваш массив ' ' dict2 [key] = arr' –

0

Не уверен, если это был ваш вопрос, но создать статическую структуру все, что вам нужно сделать, это заменить фигурные скобки в квадратные скобки.

let data = [ "data": [ 
    [ 

     "width": 150, 

     "height": 200, 

     "x": 45, 

     "y": 65, 

     "id": "line4" 

    ], 
    [ 

     "width": 150, 

     "height": 200, 

     "x": 45, 

     "y": 65, 

     "id": "line1" 

    ] 
] 
] 

И сериализовать его JSON данные:

let jsonData = try! NSJSONSerialization.dataWithJSONObject(data, options: NSJSONWritingOptions.PrettyPrinted) 

И десериализации назад к объектам Swift:

let data2 = try! NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.AllowFragments) 

Вы также можете создать JSON строку из данных:

let jsonString = String(data: jsonData, encoding: NSUTF8StringEncoding) 

or ge т данные из JSON строки:

let dataFromString = jsonString?.dataUsingEncoding(NSUTF8StringEncoding) 

Конечно, вы можете затем преобразовать его в Swift объектов с помощью NSJSONSerialization.

+0

Хороший ответ, но все еще не совсем то, что мне нужно. «Данные» должны поставляться динамически (для функции или чего-то еще). – James

+0

Что вы подразумеваете под "поставляемый динамически"? Чтобы получить точные ответы, вы должны точно указать, что вам нужно. – Adam