如何在 Swift 中的字典中插入数组

How to insert Array inside a Dicionary in Swift

我正在 Swift 创建一个绘图应用程序,可以在 canvas 上为 HTML 重新绘制。只是一个原型。我需要的是将这些数据以 JSON 格式保存到我的数据库中。 我用数组和字典组织了所有内容。

我怎样才能生成这样的东西:

 {
  "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.

我试图在另一个词典的数组中创建一个词典。 数据是动态的,这是个大问题。

帮助将不胜感激

这里说的是Objective-C的做法。您可以将此解决方案移植到 Swift.

Generate JSON string from NSDictionary in iOS

不确定这是否是您的问题,但要创建静态结构,您所要做的就是将花括号替换为方括号。

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)

或者从JSON字符串获取数据:

let dataFromString = jsonString?.dataUsingEncoding(NSUTF8StringEncoding)

当然,您可以使用 NSJSONSerialization.

将其转换为 Swift 对象
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]]]

你可以的。我不推荐你这种方法。你最好重新设计你的想法