如何在Swift中将数组添加到我的JSON字典中

时间:2015-03-02 15:45:47

标签: ios json swift post

我在我的ios应用程序中使用swift,在涉及数组时我需要帮助来创建post请求。

我需要在http请求的正文中发布这个JSON的内容:

{
    "someProperty1":"someValue1",
    "someProperty2":"someValue2",
    "someArray":[
        {"name":"nameValue1", "email":"emailValue1", "anotherProperty":"anotherValue1"},
        {"name":"nameValue2", "email":"emailValue2", "anotherProperty":"anotherValue2"},
        {"name":"nameValue2", "email":"emailValue2", "anotherProperty":"anotherValue2"},
    ]
}

到目前为止,我已经成功地为简单的请求创建了一个字典,如下所示:

{"someProperty1":"someValue1",
"someProperty2":"someValue2"}

然后使用

NSJSONSerialization.dataWithJSONObject(requestBody, options: nil, error: &err)

其中“requestBody”是一个词典

我没有成功为这个请求添加一个数组,有人可以提供一个这样看的例子吗?感谢

3 个答案:

答案 0 :(得分:2)

您可以将requestBody字典定义为包含AnyObject作为值,然后像您期望的那样添加数组:

let arr: [String] = ["hi", "ho"]
let body: [String: AnyObject] = ["someProperty1":"someValue1", "someProperty2":"someValue2", "someProperty3":arr]

let json = NSJSONSerialization.dataWithJSONObject(body, options: nil, error: nil)
println(NSString(data: json!, encoding: NSUTF8StringEncoding))

答案 1 :(得分:1)

好吧,你可以这样写:

var paramArr = [["name":"nameValue1", "email":"emailValue1", "anotherProperty":"anotherValue1"], ["name":"nameValue2", "email":"emailValue2", "anotherProperty":"anotherValue2"],["name":"nameValue3", "email":"emailValue3", "anotherProperty":"anotherValue3"]]

var requestBody = [
    "someProperty1":"someValue1",
    "someProperty2":"someValue2",
    "someArray":paramArr]

顺便说一下,请求参数太复杂了,我建议你创建数据模型来解决这个问题。

第一个名为requestParam的模型,第二个名为user的模型。和重写set方法使someArruser类(对不起,我可以在OC中使用它,但不能在Swift中使用)

requestParam.swift

var someProperty1: String!
var someProperty2: String!
var someArray: NSArray!

user.swift

var name: String!
var email: String!
var anotherProperty: String!

然后你可以将所有param变成requestBody模型

然后使用一些JSON库到字典

答案 2 :(得分:0)

我建议您使用组合AlamofireSwiftyJSON

import UIKit
import Alamofire
import Haneke

class ViewController: UIViewController {

    var datas: [JSON] = []

    override func viewDidLoad() {
        super.viewDidLoad()

        Alamofire.request(.GET, "http://xxxxx/ALL").responseJSON { (request, response, json, error) in
            if json != nil {
                if let data = jsonObj["someArray"].arrayValue as [JSON]?{
                    self.datas = data
                }
            }
        }
    }
}