如何在Swift中向JSON键添加数组值

如何在Swift中向JSON键添加数组值,json,swift,uitableview,parameters,contacts,Json,Swift,Uitableview,Parameters,Contacts,如何添加request.httpBody=getPostData(参数:[“contactsList”:[“12121212,”55555555 44”]])代替 let parameters=getPostString(参数:[“contactsList”:[phNumArray]]) 下面是工作代码,但如何在联系人列表中添加个人的phNumArray API的邮递员输出: 工作代码:任何人都可以复制粘贴以查看输出 import UIKit class TestViewController:

如何添加
request.httpBody=getPostData(参数:[“contactsList”:[“12121212,”55555555 44”]])
代替
let parameters=getPostString(参数:[“contactsList”:[phNumArray]])

下面是工作代码,但如何在联系人列表中添加个人的
phNumArray

API的邮递员输出:

工作代码:任何人都可以复制粘贴以查看输出

import UIKit
class TestViewController: UIViewController {
    var phNumArray = ["1111111111", "5555555544"]
    override func viewDidLoad() {
        super.viewDidLoad()

        callPostApi()
    }

    func getPostString(params: [String: Any]) -> String {
        var data = [String]()
        for (key, value) in params {
            data.append(key + "=\(value)")
        }
        print(data.map { String($0) }.joined(separator: "&"))
        return data.map { String($0) }.joined(separator: "&")
    }

    func callPostApi() {
        let url = URL(string: "http://itaag-env-1.ap-south-1.elasticbeanstalk.com/filter/taggedusers/")
        guard let requestUrl = url else { fatalError() }
        var request = URLRequest(url: requestUrl)
        request.httpMethod = "POST"

        request.setValue("EC3746E9-4DB4-42C7-9D8C-1542B18C2AC", forHTTPHeaderField: "deviceid")
        request.setValue("5fe42fb3b54543a0bab5667cf96526f8", forHTTPHeaderField: "key")
        request.setValue("personal", forHTTPHeaderField: "userType")

        let parameters = getPostString(params: ["contactsList": ["5555555544", "11111111111"]])

        print("json parameter phone numbers \(parameters)")

        request.httpBody = parameters.data(using: .utf8)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            let httpResponse = response as? HTTPURLResponse
            // Check for Error
            if let error = error {
                print("Error took place \(error)")
                return
            }
            if let data = data, let dataString = String(data: data, encoding: .utf8) {
                print("Response data string:\n \(dataString)")

                do {
                    let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as! [String: Any]
                    print("fetching json \(json)")
                    let fetchStatus = json["userName"] as? String
                    print("fetching json userName \(String(describing: fetchStatus))")

                    let user = json["5555555544"] as? [String: Any]
                    let name = user?["userName"] as? String
                    print("first username \(name)")
                } catch {}
            }
        }
        task.resume()
    }
}

请帮助我解决联系人列表值的问题。

更新:一直以来,您都是以
JSON
编码的方式发送请求,而不是以
表单数据的方式发送请求。我正在添加下面的代码,请尝试一下:

类ViewController:UIViewController{
变量phNumArray=[“1111111111”,“5555555544”]
重写func viewDidLoad(){
super.viewDidLoad()
callPostApi()
}
func getPostData(参数:[字符串:任意])->数据{
返回try?JSONSerialization.data(带jsonObject:params,options:.预打印)
}
func callPostApi(){
让url=url(字符串:http://itaag-env-1.ap-south-1.elasticbeanstalk.com/filter/taggedusers/")!
var-request=URLRequest(url:url)
request.httpMethod=“POST”
请求设置值(“EC3746E9-4DB4-42C7-9D8C-1542B18C2AC”,用于HttpHeaderField:“设备ID”)
请求设置值(“5FE42FB3B543A0BAB5667CF96526F8”,用于HttpHeaderField:“键”)
request.setValue(“个人”,用于HttpHeaderField:“用户类型”)
try?request.setMultipartFormData([“contactsList”:“\(phNumArray)”],编码:.utf8)
URLSession.shared.dataTask(with:request){data,u,uu中
如果let data=data,则让json=try?JSONSerialization.jsonObject(带有:data,options:.mutableContainers)作为?[String:Any]{
让user=json[“555555 44”]as?[字符串:Any]
让name=user?[“userName”]作为字符串
打印(“第一个用户名\(名称)”)
}
}1.简历()
}
}
扩展URL请求{
public mutating func setMultipartFormData(u参数:[String:String],encoding:String.encoding)抛出{
设makeRandom={UInt32.random(in:(.min).(.max))}
let boundary=String(格式:“------------------------------------%08X%08X”,makeRandom(),makeRandom())
让contentType:String=try{
guard let charset=cfStringConvertEncodingToAnaCharsetName(CFStringConvertNSStringEncodingToEncoding(encoding.rawValue))else{
抛出MultipartFormDataEncodingError.characterSetName
}
返回“多部分/表单数据;字符集=\(字符集);边界=\(边界)”
}()
addValue(contentType,forHTTPHeaderField:“内容类型”)
httpBody=try{
var body=Data()
参数中的(rawName,rawValue){
如果!body.isEmpty{
body.append(“\r\n”.data(使用:.utf8)!)
}
body.append(“--\(边界)\r\n”。数据(使用:.utf8)!)
警卫
rawName.canBeConverted(到:编码),
让disposition=“Content-disposition:form-data;name=\”\(rawName)\“\r\n”。数据(使用:编码)else{
抛出MultipartFormDataEncodingError.name(rawName)
}
body.append(处置)
body.append(“\r\n”.data(使用:.utf8)!)
guard let value=rawValue.data(使用:编码)else{
抛出MultipartFormDataEncodingError.value(rawValue,名称:rawName)
}
body.append(值)
}
body.append(“\r\n--\(边界)--\r\n”。数据(使用:.utf8)!)
返回体
}()
}
}
公共枚举MultipartFormDataEncodingError:错误{
大小写字符集名称
案例名称(字符串)
大小写值(字符串,名称:字符串)
}
使用
JSONSerialization
,而不是将其转换为JSON
String
,下面是一个示例:

func getPostData(参数:[String:Any])->数据{
返回try?JSONSerialization.data(带jsonObject:params,options:.预打印)
}
然后将其直接分配给
URLRequest
httpBody
,如下所示:

让ArrayOfNumber=[String]()
arrayOfNumber.append(“555544”)
arrayOfNumber.append(“11111111”)
request.httpBody=getPostData(参数:[“contactsList”:ArrayOfNumber])

另外,浏览一下,你会在那里找到有价值的信息。如果你不了解那里的概念,请在谷歌上搜索更多关于JSON序列化和请求后httpBody的信息。

更新:一直以来,你都是以
JSON
编码的方式发送请求,而不是以
表单数据的方式发送。我正在为下面添加代码,请尝试一下:

类ViewController:UIViewController{
变量phNumArray=[“1111111111”,“5555555544”]
重写func viewDidLoad(){
super.viewDidLoad()
callPostApi()
}
func getPostData(参数:[字符串:任意])->数据{
返回try?JSONSerialization.data(带jsonObject:params,options:.预打印)
}
func callPostApi(){
让url=url(字符串:http://itaag-env-1.ap-south-1.elasticbeanstalk.com/filter/taggedusers/")!
var-request=URLRequest(url:url)
request.httpMethod=“POST”
请求设置值(“EC3746E9-4DB4-42C7-9D8C-1542B18C2AC”,用于HttpHeaderField:“设备ID”)
请求设置值(“5FE42FB3B543A0BAB5667CF96526F8”,用于HttpHeaderField:“键”)
request.setValue(“个人”,用于HttpHeaderField:“用户类型”)
try?request.setMultipartFormData([“contactsList”:“\(phNumArray)”],编码:.utf8)
URLSession.shared.dataTask(with:request){data,u,uu中
如果让data=data,让json=try?JSONSerialization.jso