用SwiftyJSON处理JSON的例子

我想用SwiftJSON来处理json,但是我堆积了。 有没有人给我示例代码?

我试图使用这个库。 https://github.com/SwiftyJSON/SwiftyJSON

虽然我在同一个项目中放置了SwiftyJSON.swift,但是我有错误“没有这样的模块”SwiftyJSON“”所以纠正我的代码或者显示示例代码处理json从web与swiftyJSON库。

这是我的代码:

import UIKit import SwiftyJSON // No such module "SwiftyJSON" class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let url = NSURL(string: "http://express.heartrails.com/api/json?method=getPrefectures") var request = NSURLRequest(URL: url!) var data = NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error: nil) var json = NSJSONSerialization.JSONObjectWithData(data!, options: nil, error: nil) as NSDictionary var hoge = JSON(data) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } 

这是我的Xcode捕获

截图

如果您将SwiftyJSON.swift添加到项目中,则不需要import它。 它已经可用了。

尝试:

 import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let url = NSURL(string: "http://express.heartrails.com/api/json?method=getPrefectures") var request = NSURLRequest(URL: url!) var data = NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error: nil) if data != nil { var hoge = JSON(data: data!) println(hoge) } } } 

使用这个https://github.com/SwiftyJSON/SwiftyJSON版本来获得最新的SwiftyJSON

如果你想使用import SwiftyJSON那么你需要添加使用窗格来执行此操作,请按照步骤操作

  1. 打开terminal,运行sudo gem install cocoapods安装cocoapods
  2. 从您的terminal,到您的项目回家
  3. 运行pod init来初始化Podfile
  4. 打开Podfile并粘贴以下命令

platform :ios, '8.0' use_frameworks! target 'MyApp' do pod 'SwiftyJSON', '~> 2.2.1' end

  1. 最后运行pod install ,它会将SwiftyJSON添加到你的项目中
  2. closuresxcode并打开.xcworkspace而不是.xcodeproj

现在你很好走

有关更多信息,请参阅cocoapods中的SwiftyJSON

我遇到的问题不是遵循CocoaPods指令的这一点 :

确保在构build项目时始终打开Xcode工作区而不是项目文件

我正在打开该项目,而不是导致没有这样的模块错误的工作区。

打开工作空间后,这消失了。

嗨,这是一个新的教程的链接,很好地解释了如何在Swift中使用JSON。

parsingJSON SwiftyJSON的方式

Api.swift

 import UIKit extension NSMutableData { func appendString(string: String) { let data = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true) appendData(data!) } } class Api: NSObject, NSXMLParserDelegate { func CallGetApi(str: String ) -> JSON { let url = NSURL(string: "http://"+str) let request = NSURLRequest(URL: url!) let data = try? NSURLConnection.sendSynchronousRequest(request, returningResponse: nil) if data != nil { let dataDict = JSON(data: data!) return dataDict } return JSON(integerLiteral:5) } func isConnectedToNetwork() -> Bool { var Status:Bool = false let url = NSURL(string: "http://google.com/") let request = NSURLRequest(URL: url!) let data = try? NSURLConnection.sendSynchronousRequest(request, returningResponse: nil) if data != nil { Status = true } return Status } func CallPostApi(urlStr: String , postStr: String ) -> JSON { print(postStr) let link = "http://"+urlStr print("\(link)/?\(postStr)") let url = NSURL(string: link); let cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData let request = NSMutableURLRequest(URL: url!, cachePolicy: cachePolicy, timeoutInterval: 10.0) request.HTTPMethod = "POST"; request.HTTPBody = postStr.dataUsingEncoding(NSUTF8StringEncoding); if let data = try? NSURLConnection.sendSynchronousRequest(request, returningResponse: nil) { let dataDict = JSON(data: data) print(dataDict) return dataDict } if self.isConnectedToNetwork() == false { return JSON(integerLiteral:6) } return JSON(integerLiteral:5) } func CallUpdatePictures(urlStr: String , parameters: [String: String]?, pics: Array<UIImage> ) -> JSON { let link = "http://"+urlStr let url = NSURL(string: link); let cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData let request = NSMutableURLRequest(URL: url!, cachePolicy: cachePolicy, timeoutInterval: 50.0) print(link) request.HTTPMethod = "POST" let boundary:String = "---------------------------14737809831466499882746641449" request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") let body:NSMutableData = NSMutableData() if parameters != nil { for (key, value) in parameters! { body.appendString("--\(boundary)\r\n") body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n") body.appendString("\(value)\r\n") } } var i:Int = 1 for pic in pics { let img:UIImage = self.resizeImage(pic, maxHeight: 216, maxWidth: 384) let imageData = UIImagePNGRepresentation(img) //let imageData = UIImageJPEGRepresentation(img, 1.0) if imageData != nil { body.appendString("--\(boundary)\r\n") body.appendString("Content-Disposition: form-data; name=\"image\(i)\"; filename=\"image.png\"\r\n") body.appendString("Content-Type: image/png\r\n\r\n") body.appendData(imageData!) body.appendString("\r\n") i=i+1 } } body.appendString("--\(boundary)--\r\n") request.setValue("\(body.length)", forHTTPHeaderField:"Content-Length") request.HTTPBody = body if let data = try? NSURLConnection.sendSynchronousRequest(request, returningResponse: nil) { let dataDict = JSON(data: data) print(dataDict) return dataDict } if self.isConnectedToNetwork() == false { return JSON(integerLiteral:6) } return JSON(integerLiteral:5) } func CallUpdatePicture(urlStr: String , parameters: [String: String]?, pic: UIImageView ) -> JSON { let link = "http://"+urlStr let url = NSURL(string: link); let cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData let request = NSMutableURLRequest(URL: url!, cachePolicy: cachePolicy, timeoutInterval: 50.0) request.HTTPMethod = "POST" let boundary:String = "---------------------------14737809831466499882746641449" request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") let body:NSMutableData = NSMutableData() if parameters != nil { for (key, value) in parameters! { body.appendString("--\(boundary)\r\n") body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n") body.appendString("\(value)\r\n") } } if pic.image != nil { let img:UIImage = self.resizeImage(pic.image!, maxHeight: 200, maxWidth: 200) let imageData = UIImagePNGRepresentation(img) if imageData != nil { body.appendString("--\(boundary)\r\n") body.appendString("Content-Disposition: form-data; name=\"image\"; filename=\"image.png\"\r\n") body.appendString("Content-Type: image/png\r\n\r\n") body.appendData(imageData!) body.appendString("\r\n") } } body.appendString("--\(boundary)--\r\n") request.setValue("\(body.length)", forHTTPHeaderField:"Content-Length") request.HTTPBody = body if let data = try? NSURLConnection.sendSynchronousRequest(request, returningResponse: nil) { let dataDict = JSON(data: data) print(dataDict) return dataDict } if self.isConnectedToNetwork() == false { return JSON(integerLiteral:6) } return JSON(integerLiteral:5) } func resizeImage(image:UIImage, maxHeight:Float, maxWidth:Float) -> UIImage { var actualHeight:Float = Float(image.size.height) var actualWidth:Float = Float(image.size.width) var imgRatio:Float = actualWidth/actualHeight let maxRatio:Float = maxWidth/maxHeight if (actualHeight > maxHeight) || (actualWidth > maxWidth) { if(imgRatio < maxRatio) { imgRatio = maxHeight / actualHeight; actualWidth = imgRatio * actualWidth; actualHeight = maxHeight; } else if(imgRatio > maxRatio) { imgRatio = maxWidth / actualWidth; actualHeight = imgRatio * actualHeight; actualWidth = maxWidth; } else { actualHeight = maxHeight; actualWidth = maxWidth; } } let rect:CGRect = CGRectMake(0.0, 0.0, CGFloat(actualWidth) , CGFloat(actualHeight) ) UIGraphicsBeginImageContext(rect.size) image.drawInRect(rect) let img:UIImage = UIGraphicsGetImageFromCurrentImageContext()! let imageData:NSData = UIImageJPEGRepresentation(img, 1.0)! UIGraphicsEndImageContext() return UIImage(data: imageData)! } } 

Api类对象:

 var ApiObj = Api() 

loginApi调用:

  let postString = "uid=\(Email_Txt.text!)&pwd=\(Password_Txt.text!)" var dataDict=ApiObj.CallPostApi("user/login", postStr: postString) if (dataDict.null == nil) { if dataDict == 6 { msg = "Network not available" } else if dataDict.object.objectForKey("token") != nil { msg = "Successfull login " } else if dataDict.object.objectForKey("err") != nil { msg = "Invalid email or password" } }