【问题标题】:How to create a particular data structure in swift . Swifty Json not useful :(如何在 swift 中创建特定的数据结构。 Swifty Json 没用 :(
【发布时间】:2014-12-21 15:22:12
【问题描述】:

我正在将我非常简单的应用程序从 javascript(嵌入在应用程序中)移植到 ios8/swift 和 Xcode。 该应用程序将使用 CalendarApiV3 在谷歌日历中插入一些简单的事件。

在 javascript 中很容易创建一个简单的数据结构来传递一个 http POST 请求,就像这个结构:

var data:struct =
    {
        "end": {
            "dateTime": "20141223T12:25:00Z"
        },
        "start": {
            "dateTime": "20141223T10:25:00Z"
        },
        "summary": "description of event",
        "reminders": {
            "useDefault": false,
            "overrides": [
            {
            "method": "sms",
            "minutes": "60"
            },
            {
            "method": "email",
            "minutes": "60"
            }
            ]
        }
    };

好的,如何在 Swift 中重新创建一些结构? 我最终寻找了 swifty json,但他们都告诉我如何解析请求的 json,而不是如何形成 json 请求。 我希望我很清楚。

提前致谢。

维克多

【问题讨论】:

    标签: json api swift calendar google-calendar-api


    【解决方案1】:

    这是一个非常简单的示例,我假设没有人想处理 JSON 字符串,他们希望从数据结构中创建它们。

    var dict1 = ["dave": "drangle", "hume": "cronyn"]
    var dict2 = ["bob": "fossil", "vince": "powers"]
    var ary = [dict1, dict2]
    var jsonData = JSON(ary)
    var post:NSData = jsonData.rawData()!;
    var postLength:NSString = String(post.length)
    
    var url:NSURL = NSURL(string: "https://some.server.com/mobile.php")!
    var request:NSMutableURLRequest = NSMutableURLRequest(URL: url)
    request.HTTPMethod = "POST"
    request.HTTPBody = post
    request.setValue(postLength, forHTTPHeaderField: "Content-Length")
    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
    request.setValue("application/json", forHTTPHeaderField: "Accept")
    
    
    if let data = NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error: nil) {
       println(data)
    }
    

    如您所见,它是一个字典数组,然后转换为 SwiftyJSON 结构。 jsonData.rawData()!是什么让您获得 NSData,它是 request.HTTPBody 所需的数据类型。以下是您使用 file_get_contents("php://input") 和 print_r(json_decode()) 在 PHP 服务器端看到的内容:

    [{"hume":"cronyn","dave":"drangle"},{"bob":"fossil","vince":"powers"}]
    Array
    (
       [0] => stdClass Object
       (
           [hume] => cronyn
           [dave] => dangler
       )
    
       [1] => stdClass Object
       (
           [bob] => fossil
           [vince] => powers
       )
    
    )
    

    【讨论】:

      【解决方案2】:

      SwiftyJSON 非常适合在 swift 中从 AnyObject 构建 JSON 对象。

      您可以查看有关如何从 AnyObject 创建 JSON 对象的网站。

      在您拥有自己的 JSON 对象后,该网站实际上提到了如何创建可以在 HTTP 请求中使用的 JSON 字符串。

      if let string = json.rawString() {
          //Do HTTP Request here
      }
      

      这里 cezar 很好地回答了如何在 swift 中使用 HTTP 请求:How to make an HTTP request in Swift?

      更新:

      所以我假设你有 jsonString 可用,你可以用它来制作你的 swiftyJSON 对象

      let data = jsonString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
      let jsonObject = JSON(data: data!)
      

      【讨论】:

      • 谢谢,但也许我不清楚。我不必解析任何 http 响应。我只想像我在javascript中创建的那样快速创建一个数据结构
      • 所以我假设,你有可用的 jsonString,不是吗?并想做json对象
      • 不,我不知道 jsonString 是什么。只是想知道如何在我的应用程序中以 swift 代码添加上述结构
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-10
      • 1970-01-01
      • 2023-03-21
      • 2018-05-14
      • 2021-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多