신속하게 JSON 파일을 구문 분석하는 방법은 무엇입니까?


90

JSON 파일이 있고 테이블보기에서 개체 목록을 구문 분석하고 사용하고 싶습니다. 누구든지 신속하게 JSON 파일을 구문 분석하는 코드를 공유 할 수 있습니다.


2
튜토리얼이 여기에 URL 요청로드 jQuery과에 결과를 않습니다
— 크리스 스톡스

: 나는 스위프트 3 일에 완전히까지 API를 쓴 github.com/borchero/WebParsing
— borchero

답변:


101

더 간단 할 수 없습니다.

import Foundation

let jsonData: Data = /* get your json data */
let jsonDict = try JSONSerialization.jsonObject(with: jsonData) as? NSDictionary

즉, Swift 4에 도입 된 Codable API를 사용하는 것이 좋습니다 .


12
예 :let jsonData = NSData.dataWithContentsOfFile(filepath, options: .DataReadingMappedIfSafe, error: nil)
— Caroline

4
이 접근 방식의 문제점은 많은 기초 오브젝트가 생성된다는 것입니다. 즉 NSString, NSNumber, NSArray, NSDictionary 또는 NSNull입니다. 나중에 코드에서 입력되는 기본 Swift를 처리하려는 경우 다운 캐스팅 부담이 발생합니다. 특히 중첩 된 사전과 배열이있는 경우. 누구든지 이것을 다루는 방법을 알고 있습니까?
— califrench

1
이러한 유형은 Swift와 Obj-C간에 연결됩니다.
— akashivskyy

2
iOS 8.1에서 파일을로드하는 올바른 방법은 다음과 같습니다 NSData(contentsOfFile: path). 참조 developer.apple.com/library/ios/documentation/Cocoa/Reference/... :
— 클로드

7
@bubakazouba : 안타깝게도 댓글에 반대 투표를 할 수 없습니다. 몇 가지 : 1. Caroline은 이미 파일에서 데이터를로드하기위한 스 니펫을 제공했습니다 (OP가 원하는 것입니다). 2. 코드는 영어 이외의 언어 지원을 포함하여 모든 유니 코드 기호가 손실되는 ASCII 인코딩을 사용합니다.
— akashivskyy jul.

43

API 요청 만들기

var request: NSURLRequest = NSURLRequest(URL: url)
var connection: NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: false)

응답 준비

아래와 같이 배열 선언

var data: NSMutableData = NSMutableData()

응답 받기

1.

func connection(didReceiveResponse: NSURLConnection!, didReceiveResponse response: NSURLResponse!) {
   // Received a new request, clear out the data object
   self.data = NSMutableData()
}

2.

func connection(connection: NSURLConnection!, didReceiveData data: NSData!) {
   // Append the received chunk of data to our data object
   self.data.appendData(data)
}

삼.

func connectionDidFinishLoading(connection: NSURLConnection!) {
   // Request complete, self.data should now hold the resulting info
   // Convert the retrieved data in to an object through JSON deserialization
   var err: NSError
   var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary

   if jsonResult.count>0 && jsonResult["results"].count>0 {
      var results: NSArray = jsonResult["results"] as NSArray
      self.tableData = results
      self.appsTableView.reloadData()

   }
}

때 NSURLConnection응답을 수신, 우리가 기대할 수있는 didReceiveResponse방법은 우리를 대신하여 호출 할 수 있습니다. 이 시점에서 우리는 단순히 self.data = NSMutableData()새로운 빈 데이터 객체를 생성하여 데이터를 재설정 합니다.

연결이 완료되면 메소드에서 데이터 수신을 시작합니다 didReceiveData. 여기에 전달되는 데이터 인수는 모든 육즙 정보의 출처입니다. 들어오는 각 청크를 유지해야하므로 이전에 지운 self.data 개체에 추가합니다.

마지막으로 연결이 완료되고 모든 데이터가 수신되면를 connectionDidFinishLoading호출하고 앱에서 데이터를 사용할 준비가 된 것입니다. 만세!

여기서 connectionDidFinishLoading메서드는 Url의 결과를 역 직렬화하여 NSJSONSerialization원시 데이터를 유용한 Dictionary개체 로 변환 하는 클래스를 사용합니다 .


19

방금 JSON이라는 클래스를 작성하여 Swift에서 JSON을 ES5의 JSON 개체처럼 쉽게 처리 할 수 ​​있습니다.

다음과 같이 신속한 객체를 JSON으로 변환하십시오.

let obj:[String:AnyObject] = [
    "array": [JSON.null, false, 0, "",[],[:]],
    "object":[
        "null":   JSON.null,
        "bool":   true,
        "int":    42,
        "double": 3.141592653589793,
        "string": "a α\t弾\n𪚲",
        "array":  [],
        "object": [:]
    ],
    "url":"http://blog.livedoor.com/dankogai/"
]

let json = JSON(obj)
json.toString()

... 또는 문자열 ...

let json = JSON.parse("{\"array\":[...}")

... 또는 URL.

let json = JSON.fromURL("http://api.dan.co.jp/jsonenv")
Tree Traversal

아래 첨자를 통해 요소를 탐색하면됩니다.

json["object"]["null"].asNull       // NSNull()
// ...
json["object"]["string"].asString   // "a α\t弾\n𪚲"
json["array"][0].asNull             // NSNull()
json["array"][1].asBool             // false
// ...

SwiftyJSON 과 마찬가지로 첨자 항목이 존재하지 않아도 걱정할 필요가 없습니다.

if let b = json["noexistent"][1234567890]["entry"].asBool {
    // ....
} else {
    let e = json["noexistent"][1234567890]["entry"].asError
    println(e)
}

아래 첨자에 지쳤다면 다음과 같이 구성표를 추가하십시오.

//// schema by subclassing
class MyJSON : JSON {
    init(_ obj:AnyObject){ super.init(obj) }
    init(_ json:JSON)  { super.init(json) }
    var null  :NSNull? { return self["null"].asNull }
    var bool  :Bool?   { return self["bool"].asBool }
    var int   :Int?    { return self["int"].asInt }
    var double:Double? { return self["double"].asDouble }
    var string:String? { return self["string"].asString }
}

그리고 당신은 간다 :

let myjson = MyJSON(obj)
myjson.object.null
myjson.object.bool
myjson.object.int
myjson.object.double
myjson.object.string
// ...

네가 좋아하길 바래.

새로운 xCode 7.3+에서는 도메인을 예외 목록에 추가하는 것이 중요합니다 ( 내 info.plist 파일에 NSAppTransportSecurity를 ​​어떻게 추가 할 수 있습니까? ). 지침은이 게시물을 참조하십시오. 그렇지 않으면 전송 기관 오류가 발생합니다.


Github 저장소에 관한 질문 : 실제로 main.swift를 어떻게 실행합니까? 놀이터에서 자신의 프로젝트에 정의 된 클래스를 참조 할 수 없기 때문에 놀이터에서 실행하는 데 문제가 있습니다 (?!) 감사합니다!
— Janos

최신 저장소에서 메서드를 공개로 표시했습니다. 즉 Beta4에 대한 최소 요구 사항이 너무 시도하기 전에 엑스 코드를 업그레이드하는 것을 잊지 마세요합니다
— dankogai

감사합니다. 예제 코드를 정확히 실행하는 방법을 찾고있었습니다. 나는 playgroung 시도하지만 (그것의 알려진 문제는 프로젝트의 클래스를 참조 기운)을 JSON 클래스를 참조 할 수 없습니다로 작동하지 않았다
— 야노스

나는 그것을 작동시킬 수 없습니다. 가장 간단한 JSON을 시도했습니다. { "id": "Janos"}, toString 메서드라는 JSON 객체를 생성하고 파일 내용을 올바르게 뱉어 내지 만 myJson [ "id"]. asString을 호출하면 nil이됩니다. 내가 뭘 놓치고 있니?
— Janos

생성자에서 문자열을 전달하는 JSON 개체를 생성하려고했습니다 ... 이제 예제에서 수행하는 방법으로 변경했습니다. 유일한 문제는 이제 본인 또는 SwiftyJSon :)를 사용하는 하나입니다
— 야노스

4

다음은 Swift 2.0에서 JSON과 NSData를 변환하는 코드입니다.

// Convert from NSData to json object
func nsdataToJSON(data: NSData) -> AnyObject? {
    do {
        return try NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers)
    } catch let myJSONError {
        print(myJSONError)
    }
    return nil
}

// Convert from JSON to nsdata
func jsonToNSData(json: AnyObject) -> NSData?{
    do {
        return try NSJSONSerialization.dataWithJSONObject(json, options: NSJSONWritingOptions.PrettyPrinted)
    } catch let myJSONError {
        print(myJSONError)
    }
    return nil;
}

3

코딩 가능

스위프트 년 4 + 강력하게 사용하는 것이 좋습니다 Codable대신 JSONSerialization.

여기 Codable에는 Decodable및 Encodable. 이 Decodable프로토콜을 사용하면 DataJSON 형식으로이 프로토콜을 준수하는 사용자 지정 구조체 / 클래스 로 디코딩 할 수 있습니다 .

예를 들어 다음과 같은 간단한 상황을 상상해보십시오 Data(두 개체의 배열).

let data = Data("""
[
    {"name":"Steve","age":56}, 
    {"name":"iPhone","age":11}
]
""".utf8)

그런 다음 struct프로토콜 을 따르고 구현하십시오.Decodable

struct Person: Decodable {
    let name: String
    let age: Int
}

이제 첫 번째 매개 변수가 유형을 준수 하고이 유형을 디코딩 해야하는 사용 Data배열 로 디코딩 할 수 있습니다.PersonJSONDecoderDecodableData

do {
    let people = try JSONDecoder().decode([Person].self, from: data)
} catch { print(error) }

... try예를 들어 이름 지정에 약간의 실수를하여 모델을 올바르게 디코딩 할 수 없기 때문에 디코딩 은 키워드 로 표시 되어야합니다.


json의 키가 속성 이름과 다른 경우 :

  • 키에 snake_case을 사용하여 명명 된 경우의 디코더 설정할 수 있습니다 keyDecodingStrategy에 convertFromSnakeCase에서 키를 변경하는 property_name낙타 표기법에propertyName

    let decoder = JSONDecoder()
    decoder.keyDecodingStrategy = .convertFromSnakeCase
    let people = try decoder.decode([Person].self, from: data)
    
  • 고유 한 이름이 필요한 경우 키 이름을 선언하는 구조체 / 클래스 내에서 코딩 키를 사용할 수 있습니다.

    let data = Data(""" 
    { "userName":"Codable", "age": 1 } 
    """.utf8)
    
    struct Person: Decodable {
    
        let name: String
        let age: Int
    
        enum CodingKeys: String, CodingKey {
            case name = "userName"
            case age
        }
    }
    

2

또한 json 응답을 객체 구조로 매핑하는 데 특화된 작은 라이브러리를 작성했습니다. 내부적으로 David Owens의 json-swift 라이브러리를 사용하고 있습니다. 다른 사람에게 유용 할 수도 있습니다.

https://github.com/prine/ROJSONParser

Employees.json 예

{
"employees": [
  {
    "firstName": "John",
    "lastName": "Doe",
    "age": 26
  },
  {
    "firstName": "Anna",
    "lastName": "Smith",
    "age": 30
  },
  {
    "firstName": "Peter",
    "lastName": "Jones",
    "age": 45
  }]
}

다음 단계로 데이터 모델 (EmplyoeeContainer 및 Employee)을 생성해야합니다.

Employee.swift

class Employee : ROJSONObject {

    required init() {
        super.init();
    }

    required init(jsonData:AnyObject) {
        super.init(jsonData: jsonData)
    }

    var firstname:String {
        return Value<String>.get(self, key: "firstName")
    }

    var lastname:String {
        return Value<String>.get(self, key: "lastName")            
    }

    var age:Int {
        return Value<Int>.get(self, key: "age")
    }
}

EmployeeContainer.swift

class EmployeeContainer : ROJSONObject {
    required init() {
        super.init();
    }

    required init(jsonData:AnyObject) {
        super.init(jsonData: jsonData)
    }

    lazy var employees:[Employee] = {
        return Value<[Employee]>.getArray(self, key: "employees") as [Employee]
    }()
}

그런 다음 실제로 JSON 응답의 객체를 매핑하려면 생성자의 매개 변수로 EmployeeContainer 클래스에 데이터를 전달하기 만하면됩니다. 데이터 모델을 자동으로 생성합니다.

 var baseWebservice:BaseWebservice = BaseWebservice();

  var urlToJSON = "http://prine.ch/employees.json"

  var callbackJSON = {(status:Int, employeeContainer:EmployeeContainer) -> () in
    for employee in employeeContainer.employees {
      println("Firstname: \(employee.firstname) Lastname: \(employee.lastname) age: \(employee.age)")
    }
  }

  baseWebservice.get(urlToJSON, callback:callbackJSON)

콘솔 출력은 다음과 같습니다.

Firstname: John Lastname: Doe age: 26
Firstname: Anna Lastname: Smith age: 30
Firstname: Peter Lastname: Jones age: 45

@Prine
— Dilip Tiwari

2

SwiftJSONParse : 멍청한 것처럼 JSON 구문 분석

아주 간단하고 읽기 쉽습니다!

예 : 값을 얻을 "mrap"에서 nicknames이 JSON 응답에서 문자열로

{
    "other": {
        "nicknames": ["mrap", "Mikee"]
}

json 데이터를 NSData그대로 사용하므로 사전 처리 할 필요가 없습니다.

let parser = JSONParser(jsonData)

if let handle = parser.getString("other.nicknames[0]") {
    // that's it!
}

면책 조항 : 나는 이것을 만들었고 그것이 모두에게 도움이되기를 바랍니다. 자유롭게 개선하십시오!


나의 무지를 용서하십시오. SwiftyJSON과 같은 라이브러리보다 라이브러리를 사용하면 어떤 이점이 있습니까?
— Levi Roberts

6
처음에는 언어 해킹 연산자 / 기호가 마음에 들지 않았기 때문에 이것을 만들었습니다. 또한 Swift에 익숙해 지도록 만들었습니다. 호기심으로 벤치 마크를 실행 한 결과 SwiftyJSON이 뛰어난 속도 (약 2 ~ 7 배 더 빠름)를 발견했습니다. 나는 그것을 인정하기 위해 repo의 README를 업데이트했습니다.
— Mike Rapadas 2015 년

답변 해 주셔서 감사합니다.
— Levi Roberts

당신은 (루프 등 ... 본질적으로 여러 항목을) 당신이 JSON 데이터의 배열을로드 할 방법의 예를 보여줄 수
— 조셉 Astrahan

2

Swift에서 JSON을 구문 분석하는 것은 코드 생성을위한 훌륭한 작업입니다. http://www.guideluxe.com/JsonToSwift 에서 도구를 만들었습니다 .이를 위해 에서 .

클래스 이름과 함께 샘플 JSON 객체를 제공하면 도구가 해당 Swift 클래스와 필요한 보조 Swift 클래스를 생성하여 샘플 JSON이 암시하는 구조를 나타냅니다. 또한 NSJSONSerialization.JSONObjectWithData 메서드를 사용하는 메서드를 포함하여 Swift 개체를 채우는 데 사용되는 클래스 메서드도 포함됩니다. NSArray 및 NSDictionary 개체에서 필요한 매핑이 제공됩니다.

생성 된 코드에서 도구에 제공된 샘플과 일치하는 JSON이 포함 된 NSData 객체 만 제공하면됩니다.

재단 외에는 종속성이 없습니다.

내 작업은 http://json2csharp.com/ 에서 영감을 얻었습니다. 에서 .NET 프로젝트에 매우 편리합니다.

JSON 파일에서 NSData 객체를 만드는 방법은 다음과 같습니다.

let fileUrl: NSURL = NSBundle.mainBundle().URLForResource("JsonFile", withExtension: "json")!
let jsonData: NSData = NSData(contentsOfURL: fileUrl)!

1
어떤 문제가 있습니까?
— Perry Tribolet 2016 년

죄송합니다. JSON URL을 직접 붙여 넣었습니다. JSON 응답을 붙여 넣으면 잘 작동합니다. URL을 직접 붙여 넣으면 멋질 것입니다. 그러나이 유틸리티에 대한 훌륭한 직업입니다. 감사.
— ioopl 2013 년

당신이 만든 도구는 정말 대단합니다. 지난 6 개월 동안이 도구를 사용하고 있습니다. 그러나 지난 3 일 이후 갑자기 귀하의 웹 사이트에 연결할 수없고 브라우저가 "이 사이트에 연결할 수 없습니다"라는 메시지로 응답합니다. 그래서 그 이유는 무엇입니까?
— Saif

2
  1. Swifty Json 설치

참고 : 이것을 찾고 있다면 설치 방법을 모를 가능성이 높습니다 swifty. 여기 의 지침을 따르십시오 .

sudo gem install cocoapods

cd ~/Path/To/Folder/Containing/ShowTracker

다음으로 다음 명령을 입력하십시오.

pod init

그러면 Podfile프로젝트 의 기본값이 생성됩니다 . 는 Podfile당신이이 프로젝트에 의존하는 종속성 정의하는 곳입니다.

다음 명령을 입력 Podfile하여 Xcode편집 용 으로 엽니 다 .

open -a Xcode Podfile

Swiftypodfile에 추가

platform :ios, '8.0'
use_frameworks!

target 'MyApp' do
    pod 'SwiftyJSON', '~> X.X.X'
end
  1. 이 예를 확인하십시오.
var mURL = NSURL(string: "http://api.openweathermap.org/data/2.5/weather?q=London,uk&units=metric")

if mURL == nil{
    println("You are stupid")
    return
}

var request = NSURLRequest(URL: mURL!)

NSURLConnection.sendAsynchronousRequest(
    request,
    queue: NSOperationQueue.mainQueue(),
    completionHandler:{ (
        response: NSURLResponse!, 
        data: NSData!, 
        error: NSError!) -> Void in

    if data != nil {

        var mJSON = JSON(data: data!)

        if let current_conditions = mJSON["weather"][0]["description"].string {
            println("Current conditions: " + current_conditions)
        } else {
            println("MORON!")
        }

        if let current_temperature = mJSON["main"]["temp"].double {
            println("Temperature: "+ String(format:"%.f", current_temperature)  + "°C"
        } else {
            println("MORON!")
        }
    }
})

1

json parsig의 두 가지 방법을 사용하여 데이터를 수집 뷰로 표시하는 전체 뷰 컨트롤러

@IBOutlet weak var imagecollectionview: UICollectionView!
lazy var data = NSMutableData()
var dictdata : NSMutableDictionary = NSMutableDictionary()
override func viewDidLoad() {
    super.viewDidLoad()
    startConnection()
    startNewConnection()
    // Do any additional setup after loading the view, typically from a nib.
}


func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return dictdata.count
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

    let cell  = collectionView.dequeueReusableCellWithReuseIdentifier("CustomcellCollectionViewCell", forIndexPath: indexPath) as! CustomcellCollectionViewCell
    cell.name.text = dictdata.valueForKey("Data")?.valueForKey("location") as? String
    let url = NSURL(string: (dictdata.valueForKey("Data")?.valueForKey("avatar_url") as? String)! )

    LazyImage.showForImageView(cell.image, url:"URL
    return cell
}
func collectionView(collectionView: UICollectionView,
                    layout collectionViewLayout: UICollectionViewLayout,
                           sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    let kWhateverHeightYouWant = 100
    return CGSizeMake(self.view.bounds.size.width/2, CGFloat(kWhateverHeightYouWant))
}

func startNewConnection()
{

   let url: URL = URL(string: "YOUR URL" as String)!
    let session = URLSession.shared

    let request = NSMutableURLRequest(url: url as URL)
    request.httpMethod = "GET" //set the get or post according to your request

    //        request.cachePolicy = NSURLRequest.CachePolicy.ReloadIgnoringCacheData
    request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData

    let task = session.dataTask(with: request as URLRequest) {
        ( data, response, error) in

        guard let _:NSData = data as NSData?, let _:URLResponse = response, error == nil else {
            print("error")
            return
        }

       let jsonString = NSString(data: data!, encoding:String.Encoding.utf8.rawValue) as! String
               }
    task.resume()

}

func startConnection(){
    let urlPath: String = "your URL"
    let url: NSURL = NSURL(string: urlPath)!
    var request: NSURLRequest = NSURLRequest(URL: url)
    var connection: NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: false)!
    connection.start()
}

func connection(connection: NSURLConnection!, didReceiveData data: NSData!){
    self.data.appendData(data)
}

func buttonAction(sender: UIButton!){
    startConnection()
}

func connectionDidFinishLoading(connection: NSURLConnection!) {
    do {
        let JSON = try NSJSONSerialization.JSONObjectWithData(self.data, options:NSJSONReadingOptions(rawValue: 0))
        guard let JSONDictionary :NSDictionary = JSON as? NSDictionary else {
            print("Not a Dictionary")
            // put in function
            return
        }
        print("JSONDictionary! \(JSONDictionary)")
        dictdata.setObject(JSONDictionary, forKey: "Data")

        imagecollectionview.reloadData()
    }
    catch let JSONError as NSError {
        print("\(JSONError)")
    }    }

1

ObjectMapper 프레임 워크 사용

if let path = Bundle(for: BPPView.self).path(forResource: jsonFileName, ofType: "json") {
    do {
        let data = try Data(contentsOf: URL(fileURLWithPath: path), options: NSData.ReadingOptions.mappedIfSafe)
        let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments)
        self.levels = Mapper<Level>().mapArray(JSONArray: (json as! [[String : Any]]))!
        print(levels.count)
    } catch let error as NSError {
        print(error.localizedDescription)
    }
} else {
    print("Invalid filename/path.")
}

파싱 ​​할 적절한 : Mappable 객체 세트를 준비하기 전에

import UIKit 
import ObjectMapper
class Level: Mappable {
var levelName = ""
var levelItems = [LevelItem]()

required init?(map: Map) {

}

// Mappable
func mapping(map: Map) {
    levelName <- map["levelName"]
    levelItems <- map["levelItems"]
}

 import UIKit 
import ObjectMapper 
class LevelItem: Mappable {
var frontBackSide = BPPFrontBack.Undefined
var fullImageName = ""
var fullImageSelectedName = ""
var bodyParts = [BodyPart]()

required init?(map: Map) {

}

// Mappable
func mapping(map: Map) {
    frontBackSide <- map["frontBackSide"]
    fullImageName <- map["fullImageName"]
    fullImageSelectedName <- map["fullImageSelectedName"]
    bodyParts <- map["bodyParts"]
}}

1

스위프트 3

let parsedResult: [String: AnyObject]
do {      
    parsedResult = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as! [String:AnyObject]       
} catch {        
    // Display an error or return or whatever
}

데이터-데이터 유형 (구조) (즉, 일부 서버 응답에 의해 반환 됨)


0

이 파서는 제네릭을 사용하여 JSON을 Swift 유형으로 캐스트하여 입력해야하는 코드를 줄입니다.

https://github.com/evgenyneu/JsonSwiftson

struct Person {
  let name: String?
  let age: Int?
}

let mapper = JsonSwiftson(json: "{ \"name\": \"Peter\", \"age\": 41 }")

let person: Person? = Person(
  name: mapper["name"].map(),
  age: mapper["age"].map()
)

0

다음은 Swift Playground 예제입니다.

import UIKit

let jsonString = "{\"name\": \"John Doe\", \"phone\":123456}"

let data = jsonString.data(using: .utf8)

var jsonObject: Any
do {
    jsonObject = try JSONSerialization.jsonObject(with: data!) as Any

    if let obj = jsonObject as? NSDictionary {
        print(obj["name"])
    }
} catch {
    print("error")
}

0

스위프트 4

프로젝트 생성

버튼과 UITableview로 스토리 보드 디자인하기

TableViewCell VC 생성

In Button Action 다음 코드 삽입

API에서 데이터 배열을 가져 오기 위해이 코드 기억

import UIKit

class ViewController3: UIViewController,UITableViewDelegate,UITableViewDataSource {

    @IBOutlet var tableView: UITableView!
    var displayDatasssss = [displyDataClass]()
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return displayDatasssss.count
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell1") as! TableViewCell1
        cell.label1.text = displayDatasssss[indexPath.row].email
        return cell
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func gettt(_ sender: Any) {

        let url = "http://jsonplaceholder.typicode.com/users"
        var request = URLRequest(url: URL(string: url)!)
        request.httpMethod = "GET"
        let configuration = URLSessionConfiguration.default
        let session = URLSession(configuration: configuration, delegate: nil, delegateQueue: OperationQueue.main)
        let task = session.dataTask(with: request){(data, response,error)in
            if (error != nil){
                print("Error")
            }
            else{
                do{
                    // Array of Data 
                    let fetchData = try JSONSerialization.jsonObject(with: data!, options: .mutableLeaves) as! NSArray

                    for eachData in fetchData {

                        let eachdataitem = eachData as! [String : Any]
                        let name = eachdataitem["name"]as! String
                        let username = eachdataitem["username"]as! String

                        let email = eachdataitem["email"]as! String
                         self.displayDatasssss.append(displyDataClass(name: name, username: username,email : email))
                    }
                    self.tableView.reloadData()
                }
                catch{
                    print("Error 2")
                }

            }
        }
        task.resume()

    }
}
class displyDataClass {
    var name : String
    var username : String
    var email : String

    init(name : String,username : String,email :String) {
        self.name = name
        self.username = username
        self.email = email
    }
}

이것은 사전 데이터 가져 오기를위한 것입니다.

import UIKit

class ViewController3: UIViewController,UITableViewDelegate,UITableViewDataSource {

    @IBOutlet var tableView: UITableView!
    var displayDatasssss = [displyDataClass]()
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return displayDatasssss.count
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell1") as! TableViewCell1
        cell.label1.text = displayDatasssss[indexPath.row].email
        return cell
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func gettt(_ sender: Any) {

        let url = "http://jsonplaceholder.typicode.com/users/1"
        var request = URLRequest(url: URL(string: url)!)
        request.httpMethod = "GET"
        let configuration = URLSessionConfiguration.default
        let session = URLSession(configuration: configuration, delegate: nil, delegateQueue: OperationQueue.main)
        let task = session.dataTask(with: request){(data, response,error)in
            if (error != nil){
                print("Error")
            }
            else{
                do{
                    //Dictionary data Fetching
                    let fetchData = try JSONSerialization.jsonObject(with: data!, options: .mutableLeaves) as! [String: AnyObject]
                        let name = fetchData["name"]as! String
                        let username = fetchData["username"]as! String

                        let email = fetchData["email"]as! String
                         self.displayDatasssss.append(displyDataClass(name: name, username: username,email : email))

                    self.tableView.reloadData()
                }
                catch{
                    print("Error 2")
                }

            }
        }
        task.resume()

    }
}
class displyDataClass {
    var name : String
    var username : String
    var email : String

    init(name : String,username : String,email :String) {
        self.name = name
        self.username = username
        self.email = email
    }
}

0

Swift 4 API 요청 예

활용 JSONDecoder().decode

Swift 4로 JSON 구문 분석 비디오보기


struct Post: Codable {
    let userId: Int
    let id: Int
    let title: String
    let body: String
}

URLSession.shared.dataTask(with: URL(string: "https://jsonplaceholder.typicode.com/posts")!) { (data, response, error) in

    guard let response = response as? HTTPURLResponse else {
        print("HTTPURLResponse error")
        return
    }

    guard 200 ... 299 ~= response.statusCode else {
        print("Status Code error \(response.statusCode)")
        return
    }

    guard let data = data else {
        print("No Data")
        return
    }

    let posts = try! JSONDecoder().decode([Post].self, from: data)
    print(posts)      
}.resume()

0

Swift 2 iOS 9

let miadata = NSData(contentsOfURL: NSURL(string: "https://myWeb....php")!)

do{
    let MyData = try NSJSONSerialization.JSONObjectWithData(miadata!, options: NSJSONReadingOptions.MutableContainers) as? NSArray
    print(".........\(MyData)")    
}
catch let error as NSError{
    // error.description
    print(error.description)
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.