我正在将我非常简单的应用程序从javascript(嵌入在应用程序中)移植到ios8 / swift和Xcode。 该应用程序将使用CalendarApiV3在Google日历中插入一些简单的事件。
在javascript中,很容易创建一个简单的数据结构来传递一个http POST请求,就像这样的结构:
var data:struct =
{
"end": {
"dateTime": "20141223T12:25:00Z"
},
"start": {
"dateTime": "20141223T10:25:00Z"
},
"summary": "description of event",
"reminders": {
"useDefault": false,
"overrides": [
{
"method": "sms",
"minutes": "60"
},
{
"method": "email",
"minutes": "60"
}
]
}
};
好的,如何在Swift中重新创建一些结构? 我最终寻找了很好的json,但是他们都告诉我如何让json请求PARSE,而不是如何形成一个json请求。 我希望我很清楚。
提前致谢。
维克多
答案 0 :(得分:4)
这是一个非常简单的示例,我假设没有人想要处理JSON字符串,他们希望从数据结构中创建它们。
var dict1 = ["dave": "drangle", "hume": "cronyn"]
var dict2 = ["bob": "fossil", "vince": "powers"]
var ary = [dict1, dict2]
var jsonData = JSON(ary)
var post:NSData = jsonData.rawData()!;
var postLength:NSString = String(post.length)
var url:NSURL = NSURL(string: "https://some.server.com/mobile.php")!
var request:NSMutableURLRequest = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
request.HTTPBody = post
request.setValue(postLength, forHTTPHeaderField: "Content-Length")
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.setValue("application/json", forHTTPHeaderField: "Accept")
if let data = NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error: nil) {
println(data)
}
正如您所看到的,它是一个字典数组,然后转换为SwiftyJSON结构。 jsonData.rawData()!是什么让你获得NSData,这是request.HTTPBody所需的数据类型。以下是使用file_get_contents(" php:// input")和print_r(json_decode())在PHP服务器端看到的内容:
[{"hume":"cronyn","dave":"drangle"},{"bob":"fossil","vince":"powers"}]
Array
(
[0] => stdClass Object
(
[hume] => cronyn
[dave] => dangler
)
[1] => stdClass Object
(
[bob] => fossil
[vince] => powers
)
)
答案 1 :(得分:1)
SwiftyJSON非常适合在swift中从AnyObject构建JSON对象。
您可以查看有关如何从AnyObject创建JSON对象的网站。
拥有自己的JSON对象后,该网站实际上提到了如何创建可在HTTP请求中使用的JSON字符串。
if let string = json.rawString() {
//Do HTTP Request here
}
这里cezar回答了很多关于如何在swift中使用HTTP请求:How to make an HTTP request in Swift?
<强>更新强>
所以我假设你有jsonString可用,你可以使用它来制作你的swiftyJSON对象
let data = jsonString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
let jsonObject = JSON(data: data!)