我在我的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”是一个词典
我没有成功为这个请求添加一个数组,有人可以提供一个这样看的例子吗?感谢
答案 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方法使someArr
到user
类(对不起,我可以在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)
我建议您使用组合Alamofire
和SwiftyJSON
。
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
}
}
}
}
}