我的后端期待以下JSON正文:
[
{
"number":"561310"
},
{
"number":"132333"
},
{
"number":"561310"
}
]
当我这样输入时,它在Postman中效果非常好:
如何使用Swift创建类似的JSON? 现在,我有一组String类型的电话号码。
let phonenumbers = [String]()
for phonenumber in phonenumbers {
print(phonenumber)
}
这将打印: 561310 132333 561310
制作此JSON之后,我想将其用作AlamoFire的参数。
答案 0 :(得分:3)
let phoneNumbersDictionary = phonenumbers.map({ ["number": $0] })
但是,Alamofire.request
期望POST正文的格式为[String: AnyObject?]
,因此您无法直接传递上述数组。您需要使用{{3}将其转换为JSON对象并通过NSURLRequest
传递:
let JSON = try? NSJSONSerialization.dataWithJSONObject(phoneNumbersDictionary, options: [])
let request = NSMutableURLRequest(URL: url)
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.HTTPMethod = "POST"
request.HTTPBody = JSON
Alamofire.request(request).responseJSON { ...
顺便说一下,dataWithJSONObject
会返回NSData
类型的结果,因此如果要将其打印出来,则应将其转换为字符串:
if let JSON = JSON {
print(String(data: JSON, encoding: NSUTF8StringEncoding))
}
此外,如果您更喜欢使用内置的NSURLSession
库,请查看此.dataWithJSONObject(options:)
。
答案 1 :(得分:1)
你可以在swift中使用字典数组。
例如,您可以按如下方式创建相同的内容:
var phonenumbers = [[String: String]]()
let dataToAppend: [String: String] = ["number": "561310"]
phonenumbers.append(dataToAppend)
phonenumbers.append(dataToAppend)
phonenumbers.append(dataToAppend)
for phonenumber in phonenumbers {
print(phonenumber)
}
请记住,这只是您可以遵循的一种方法。虽然制作这类东西有很多不同的程序。
在您的情况下,您可以通过在phonenumbers
数组中运行循环来更新键值对,并将新数据附加到您将作为标题发送到后端的主阵列。
感谢。
希望这会有所帮助。
答案 2 :(得分:-1)
在我的场景中,我需要在此格式中发送数据
[ {"id": "123" , "value":, "this is value"},
{"id": "123" , "value":, "this is value"},
{"id": "123" , "value":, "this is value"} ]
我解决了这个问题
func map() -> [[String: String]]{
var jsonArray: [[String: String]] = [[String: String]]()
//here data is arra of objets or values where your data exist, if your data is not in an array you can user object or what ever format you have like this jsonArray.append(["key": "value", "key":"value"])
for value in data {
let json = (["key": "value", "key":"value"])
jsonArray.append(json as! [String : String])
}
print(jsonArray)
return jsonArray
}
并在 Alamofire
中使用此地图()作为参数