EVReflection: easier way to parse JSON
사용 소개
EVReflection은 자동으로 EVObject에 맞는 클래스를 JSON에서 반서열화할 수 있습니다. 우선 자신의 모델 클래스가 EVObject를 계승해야 합니다.
class User: EVObject {
var id: Int = 0
var name: String = ""
var friends: [User]? = []
}
단일 객체의 반서열화
let json:String = "{\"id\": 24, \"name\": \"Bob Jefferson\", \"friends\": [{\"id\": 29, \"name\": \"Jen Jackson\"}]}"
let user = User(json: json)
배열의 반서열화
let json:String = "[{\"id\": 27, \"name\": \"Bob Jefferson\"}, {\"id\": 29, \"name\": \"Jen Jackson\"}]"
let array = [User](json: json)
Demo
다음은 찹쌀망 도시 리스트를 획득한 데모를 통해 EVReflection의 사용법을 알아보겠습니다.
의존성 추가
여기서 우리는 코코아팟을 통해 의존을 관리한다
pod 'EVReflection'
pod 'Alamofire'
ServiceProxy 클래스
우선 ServiceProxy 클래스를 새로 만들고 네트워크 요청 부분 코드를 넣습니다
import Foundation
import EVReflection
import Alamofire
class ServiceProxy{
// MARK: -URL
static var ServiceEndpointBase : String {
return "http://apis.baidu.com/baidunuomi/openapi/cities"
}
class func getCityList (complete:(response: AnyObject?, error: NSError?) -> Void){
Alamofire.request(.GET, ServiceEndpointBase, parameters: parameters, encoding: .URL, headers: ["apikey":"ownAPIKey"]).validate(statusCode: 200..<300).responseJSON { (response:Response) -> Void in
print(response.result.value!)
complete(response: response.result.value, error: response.result.error)
}
}
}
분석 JSON
우리 먼저 결과를 프린트하고 JSON을 분석해 봅시다.
{
cities = (
{
"city_id" = 100010000;
"city_name" = "\U5317\U4eac\U5e02";
"city_pinyin" = beijing;
"short_name" = "\U5317\U4eac";
"short_pinyin" = bj;
},
{
"city_id" = 500010000;
"city_name" = "\U5929\U6d25\U5e02";
"city_pinyin" = tianjin;
"short_name" = "\U5929\U6d25";
"short_pinyin" = tj;
},
{
"city_id" = 1800010000;
"city_name" = "\U77f3\U5bb6\U5e84\U5e02";
"city_pinyin" = shijiazhuang;
"short_name" = "\U77f3\U5bb6\U5e84";
"short_pinyin" = sjz;
},
{
"city_id" = 1800020000;
"city_name" = "\U5510\U5c71\U5e02";
"city_pinyin" = tangshan;
"short_name" = "\U5510\U5c71";
"short_pinyin" = ts;
},
{
"city_id" = 1800030000;
"city_name" = "\U79e6\U7687\U5c9b\U5e02";
"city_pinyin" = qinhuangdao;
"short_name" = "\U79e6\U7687\U5c9b";
"short_pinyin" = qhd;
},
{
"city_id" = 1800040000;
"city_name" = "\U90af\U90f8\U5e02";
"city_pinyin" = handan;
"short_name" = "\U90af\U90f8";
"short_pinyin" = hd;
},
{
"city_id" = 1800050000;
"city_name" = "\U90a2\U53f0\U5e02";
"city_pinyin" = xingtai;
"short_name" = "\U90a2\U53f0";
"short_pinyin" = xt;
},
{
"city_id" = 1800060000;
"city_name" = "\U4fdd\U5b9a\U5e02";
"city_pinyin" = baoding;
"short_name" = "\U4fdd\U5b9a";
"short_pinyin" = bd;
},
{
"city_id" = 1800070000;
"city_name" = "\U5f20\U5bb6\U53e3\U5e02";
"city_pinyin" = zhangjiakou;
"short_name" = "\U5f20\U5bb6\U53e3";
"short_pinyin" = zjk;
},
{
"city_id" = 1800080000;
"city_name" = "\U627f\U5fb7\U5e02";
"city_pinyin" = chengde;
"short_name" = "\U627f\U5fb7";
"short_pinyin" = chengde;
},
{
"city_id" = 1800090000;
"city_name" = "\U6ca7\U5dde\U5e02";
"city_pinyin" = cangzhou;
"short_name" = "\U6ca7\U5dde";
"short_pinyin" = cangzhou;
},
{
"city_id" = 1800100000;
"city_name" = "\U5eca\U574a\U5e02";
"city_pinyin" = langfang;
"short_name" = "\U5eca\U574a";
"short_pinyin" = lf;
}
......
);
errno = 0;
msg = success;
}
모델 클래스 생성
다음에 모델들을 쓸 때 주의해야 할 것은 우리가 정의한 데이터 클래스는 반드시 EVObject를 계승해야 한다는 것이다
import Foundation
import EVReflection
class CityModel:EVObject{
var city_name = ""
var city_pinyin = ""
var short_name = ""
var short_pinyin = ""
var city_id = 100010000
}
테스트 결과
마지막으로viewDidLoad 방법에서 도시 목록의 획득 상황을 테스트해 보겠습니다.
JSON 유형은 SwiftyJSON에서 제공
ServiceProxy.getCityList({ (response, error) -> Void in
let array = [CityModel](json: JSON(response!)["cities"].rawString())
print(array)
})
마지막으로 얻은 데이터의 결과는 다음과 같다
CityModel {
hash = -1349730932489599961
key = short_name, value =
key = city_pinyin, value = leping
key = city_name, value =
key = short_pinyin, value = leping
key = city_id, value = 2400130000
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
콘텐츠 SaaS | JSON 스키마 양식 빌더Bloomreach Content를 위한 JSON Form Builder 맞춤형 통합을 개발합니다. 최근 Bloomreach Content SaaS는 내장 앱 프레임워크를 사용하여 혁신적인 콘텐츠 유형 필드를 구축할...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.