【问题标题】:How do I add an array to my JSON dictionary in Swift如何在 Swift 中将数组添加到我的 JSON 字典
【发布时间】:2015-03-02 15:45:46
【问题描述】:

我在我的 ios 应用程序中使用 swift,当涉及到数组时,我需要帮助来创建发布请求。

我需要在 http 请求的正文中发布一些类似于此 JSON 的内容:

{
    "someProperty1":"someValue1",
    "someProperty2":"someValue2",
    "someArray":[
        {"name":"nameValue1", "email":"emailValue1", "anotherProperty":"anotherValue1"},
        {"name":"nameValue2", "email":"emailValue2", "anotherProperty":"anotherValue2"},
        {"name":"nameValue2", "email":"emailValue2", "anotherProperty":"anotherValue2"},
    ]
}

到目前为止,我已经成功地为看起来像这样的简单请求创建了一个字典:

{"someProperty1":"someValue1",
"someProperty2":"someValue2"}

然后使用

NSJSONSerialization.dataWithJSONObject(requestBody, options: nil, error: &err)

其中“requestBody”是一个字典

我在向这个请求中添加一个数组时没有成功,有人可以提供一个例子来说明它的外观吗?谢谢

【问题讨论】:

  • 我建议你使用 SwiftyJSON 来简化。
  • @Dato'MohammadNurdin 我的项目中确实有 SwiftyJson。它非常适合解析我收到的 JSON。我不知道 swiftyJSON 是如何促进 POST JSON 的

标签: ios json swift post


【解决方案1】:

您可以将您的 requestBody 字典定义为包含 AnyObject 作为值,然后按照您的预期添加数组:

let arr: [String] = ["hi", "ho"]
let body: [String: AnyObject] = ["someProperty1":"someValue1", "someProperty2":"someValue2", "someProperty3":arr]

let json = NSJSONSerialization.dataWithJSONObject(body, options: nil, error: nil)
println(NSString(data: json!, encoding: NSUTF8StringEncoding))

【讨论】:

    【解决方案2】:

    好吧,你可以这样写:

    var paramArr = [["name":"nameValue1", "email":"emailValue1", "anotherProperty":"anotherValue1"], ["name":"nameValue2", "email":"emailValue2", "anotherProperty":"anotherValue2"],["name":"nameValue3", "email":"emailValue3", "anotherProperty":"anotherValue3"]]
    
    var requestBody = [
        "someProperty1":"someValue1",
        "someProperty2":"someValue2",
        "someArray":paramArr]
    

    顺便说一下,请求参数太复杂了,建议你创建数据模型来解决这个问题。

    第一个模型名为requestParam,第二个模型名为user。并重写 set 方法使someArr 成为user 类(对不起,我可以在 OC 中使用它,但不能在 Swift 中使用)

    requestParam.swift

    var someProperty1: String!
    var someProperty2: String!
    var someArray: NSArray!
    

    user.swift

    var name: String!
    var email: String!
    var anotherProperty: String!
    

    然后你可以把所有的参数都变成requestBody模型

    然后使用一些 JSON 库来字典

    【讨论】:

      【解决方案3】:

      我建议你使用AlamofireSwiftyJSON的组合。

      import UIKit
      import Alamofire
      import Haneke
      
      class ViewController: UIViewController {
      
          var datas: [JSON] = []
      
          override func viewDidLoad() {
              super.viewDidLoad()
      
              Alamofire.request(.GET, "http://xxxxx/ALL").responseJSON { (request, response, json, error) in
                  if json != nil {
                      if let data = jsonObj["someArray"].arrayValue as [JSON]?{
                          self.datas = data
                      }
                  }
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-25
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        相关资源
        最近更新 更多