JsonをSwiftJSONで処理したいのですが、スタックしました。誰かがサンプルコードを見せてくれますか?
このライブラリを使用しようとしました。 https://github.com/SwiftyJSON/SwiftyJSON
SwiftyJSON.Swiftを同じプロジェクトに配置しましたが、「No such module "SwiftyJSON"」というエラーが発生するため、コードを修正するか、swiftyJSON libを使用してWebからjsonを処理するコード例を示します。
ここに私のコードがあります:
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
を使用する場合は、ポッドを使用して追加する必要があります。手順を実行してください
Sudo gem install cocoapods
を実行してcocoapods
をインストールしますpod init
を実行してPodfile
を初期化しますPodfile
を開き、次のコマンドを貼り付けますplatform :ios, '8.0' use_frameworks! target 'MyApp' do pod 'SwiftyJSON', '~> 2.2.1' end
pod install
を実行すると、プロジェクトにSwiftyJSONが追加されます.xcworkspace
の代わりに.xcodeproj
を開きますこれでいい
詳細については、 ココポッドのSwiftyJSON
私が抱えていた問題は、次のことではありません CocoaPods命令のこのビット :
プロジェクトをビルドするときは、プロジェクトファイルではなくXcodeワークスペースを必ず開いてください
ワークスペースではなくプロジェクトを開いていたため、No Such Moduleエラーが発生しました。
ワークスペースを開いた後、これはなくなりました。
こんにちは、これはSwiftでJSONを操作する方法を非常によく説明する新しいチュートリアルへのリンクです。
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()
ログインAPI呼び出し:
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"
}
}