您的位置:首页 > 移动开发 > Swift

swift 服务端要求json对象怎么办?(二)

2015-05-27 17:13 183 查看
还记得上次post请求的参数格式吗?

“{‘name’:dog','password':'123'}”

为什么要这么写呢?

一:网络编程,你需要一个利器抓包工具,Fiddler 这个就不错,我发现抓到的http contentType =
"application/x-www-form-urlencoded" 额,好吧,我想要的是contentType=“application/json”,到YYHRequest中看看那里设置,

func serializeRequestParameters() {
contentType = "application/x-www-form-urlencoded"

if (method == "GET") {
if let queryURL = queryParametersURL() {
url = queryURL
}
} else {
body = serializedRequestBody()
}
}
啊,是这里,立马改成 contentType=“application/json”,好吧,跑起来看看,还是没什么卵用

二:那还是沿着原来的路线来吧

写个方法吧,干脆

func ConvertType(parameters:Dictionary<String,String>)->String{

var para:Dictionary<String,String> = parameters

var paraStr:String="{"

for (key, value) in para{
paraStr = paraStr + "'" + key + "'" + ":" + "'" + value + "'" + ","
}

let rangeOfPara = Range(start: paraStr.startIndex,
end: advance(paraStr.endIndex, -1))

let finalStr = paraStr.substringWithRange(rangeOfPara)

var parametersStr:String = finalStr + "}"

return parametersStr
}


这样的话,你就可以吧字典转为需要的“{‘name’:dog','password':'123'}”类型了

如果有多个,多层,那你就需要不断的循环添加了

var strTest:[String]=[]

var n:Int=5

for i in 0…n{

let parameter1:Dictionary<String,String> =  [“a”:”1” ]

let parameter2:Dictionary<String,String>  =  [“a”:”1” ]

strTest.insert("{“+self.ConvertType(parameter1)+ self.ConvertType

(parameter2)+"}", atIndex: strTest.endIndex)

}

println(strTest )


这样最后就生产出来服务器需要的格式了大致如下

"[{'a':{'aa':'1'},'b':[{'a':'1'},{}]},{},{},{},{}]"

三:总结:

其实主要的思路就是:先看你要什么格式,比如我要的就是“{‘name’:dog','password':'123'}”这种类型,然后再利用for
key value 的方法来变量字典中的值,给他拼接成你想要的最后格式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: