在 Swift 中创建 JSON 数组

Posted

技术标签:

【中文标题】在 Swift 中创建 JSON 数组【英文标题】:Creating JSON Array in Swift 【发布时间】:2016-10-03 07:53:24 【问题描述】:

我的后端期待以下 JSON 正文:

[
    
        "number":"561310"
    ,
    
        "number":"132333"   
    ,
    
        "number":"561310"   
    
]

当我像这样输入它时,它在 Postman 中工作得非常好:

如何使用 Swift 创建类似的 JSON? 现在我有一个字符串类型的电话号码数组。

let phonenumbers = [String]()
for phonenumber in phonenumbers 
    print(phonenumber)

这将打印: 561310 132333 561310

制作此 JSON 后,我想将其用作 AlamoFire 的参数。

【问题讨论】:

***.com/questions/39439211/…的可能重复 【参考方案1】:
let phoneNumbersDictionary = phonenumbers.map( ["number": $0] )

但是,Alamofire.request 期望 POST 正文采用 [String: AnyObject?] 的形式,因此您不能直接将上述数组传入。您需要使用 .dataWithJSONObject(options:) 将其转换为 JSON 对象并通过 @987654327 传递@:

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 库,请查看此SO question。

【讨论】:

好人!非常感谢您输入这两个选项并参考其他 SO 问题。 啊等一下,虽然有 1 个问题...我无法将 phoneNumbersDictionary 添加为参数:请求的。它说它正在获取 [[String:String]] 但期待 [String:AnyObject]? @RutgerHuijsmans 是的,我完全忘记了您不能使用该函数将数组传递给 Alamofire.request。您应该首先创建一个 NSURLRequest。更新了我的答案。【参考方案2】:

在我的场景中,我需要以这种格式发送数据

[ "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 = (["key1": value.someVariable, "key2": value.someOtherVariable ])
            jsonArray.append(json as! [String : String])
        
        print(jsonArray)
        return jsonArray
    

并在 Alamofire

中将此 map() 用作参数

【讨论】:

【参考方案3】:

您可以在 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 数组中运行循环来更新键值对,并将新数据附加到您将作为标头发送到后端的主数组。

谢谢。

希望这会有所帮助。

【讨论】:

以上是关于在 Swift 中创建 JSON 数组的主要内容,如果未能解决你的问题,请参考以下文章

在 swift alamofire 中创建 json 数组

如何在 ios swift 中创建 json 对象

在 Swift-Json 中创建 NSMutableDictionary

在 Swift 中创建一个随机数数组

如何在 Swift 中创建 UITextField 对象数组?

在 Swift 中创建类和结构来表示 JSON 对象