2016-07-08 2 views
-2

Alamofire를 사용하여 게시 요청에 보낼 변수를 JSON 값으로 전달하려고합니다. 첫 번째 예제는 JSON 값을 표시하는 방법이지만 변수가 전달되면 JSON은 실제로 두 번째 예제와 유사합니다. 아무도 잘못되거나 무엇을 해결할 수 있는지 알고 있습니까?JSON 데이터 조작

올바른 JSON :

{ "gender": "male", 
    "dob": "08 Jul 2001", 
    "loyalty_points": "2", 
    "barber_type": "1",  
    "account": {   
     "first_name": "Bob",   
     "last_name": "Smith",  
     "email": "[email protected]",   
     "password": "1234",   
     "timestamp": "2016-07-08 20:26:13 +0000"  
    } 
} 

잘못된 JSON :

[ "loyalty_points": 0, 
    "account": { 
     email = "[email protected]"; 
     "first_name" = Bob; 
     "last_name" = Smith; 
     password = 1234; 
     timestamp = "2016-07-08 20:26:13 +0000"; 
    }, 
    "gender": Male, 
    "barber_type": 2, 
    "dob": 08 Jul 2001 
] 

스위프트 코드 :

let account: [String: AnyObject] = [ "first_name": firstName!, "last_name": lastName!, "email": email!, "password": password!, "timestamp": NSDate()] 

let parameters: [String: AnyObject] = [ "gender": gender!, "dob": date!, "loyalty_points": "0", "barber_type": barberType!, "account": account] 

Alamofire.request(.POST, "api.exampledomain.co.uk/v1/user";, parameters: parameters as? [String : AnyObject], encoding: .JSON) 
+1

그래서 변환을 수행해야하는데 코드에 대해? – Alnitak

+1

두 번째 덤프에서 잘못된 점은 무엇이라고 생각하니 어떻게 작성 했습니까? –

+0

매개 변수 변수를 인쇄하여 보내기 전에 올바른지 확인합니다. @Alnitak – User

답변

-2

당신은 보이는 각 개인의 정보에 대한 동일한 형식을 원하는 경우 그렇다면 을 사용할 수있는 경우 arrays으로 시간을 낭비하지 마십시오.

스위프트 예제 코드 :

let gender = "Male"   // Test data 
let date = "08 Jul 2001" 
let loyalty_points = 0 
let barberType = 1 
let firstName = "Bob" 
let lastName = "Smith" 
let email = "[email protected]" 
let password = "1234" 

let jsonstring = "{\t\"gender\": \"\(gender)\",\n\t\"dob\": \"\(date)\", \n\t\"loyalty_points\": \"\(loyalty_points)\",\n\t\"barber_type\": \"\(barberType)\",\t \n\t\"account\": {\t\t\n\t\t\"first_name\": \"\(firstName)\",\t\t\n\t\t\"last_name\": \"\(lastName)\",\t\n\t\t\"email\": \"\(email)\",\t\t\n\t\t\"password\": \"\(password)\",\t\t \n\t\t\"timestamp\": \"\(NSDate())\"\t\n\t}\n}" 

print(jsonstring) // Output the JSON code 

결과 :

{ "gender": "Male", 
    "dob": "08 Jul 2001", 
    "loyalty_points": "0", 
    "barber_type": "1", 
    "account": {   
     "first_name": "Bob",   
     "last_name": "Smith",  
     "email": "[email protected]",   
     "password": "1234",  
     "timestamp": "2016-07-08 17:18:34 +0000"  
    } 
} 
+0

손을 직렬화하는 JSON은 깨진 JSON을 생성하는 확실한 방법입니다. – Alnitak

+0

더 좋은 방법이 있습니까? @Alnitak – User

+1

@ 당신은 왜 당신이 문제가 있다고 생각하는지 설명하지 않았습니다. 'print()'함수는 JSON을 출력하지 않으므로 출력과 비교하는 것은 불가능하며 실제로 Alamofire POST에서 나오는 출력을 보여주지 못했습니다 요구. – Alnitak

1

법적 JSON 내로 NSDate() 개체를 변환 할 수 없습니다, 당신이하려고 할 때 예외가 발생합니다 Alamofire에서 사용하는 기본 NSJSONSerialization.dataWithJSONObject() 기능. 따라서 timestamp 개체를 문자열 값으로 변환 한 다음 account 개체에 추가해야합니다. 출력

import Foundation 

let firstName: String? = "Bob" 
let lastName: String? = "Smith" 
let email: String? = "[email protected]" 
let password: String? = "1234" 

var formatter: NSDateFormatter = NSDateFormatter() 
formatter.dateFormat = "Y-MM-dd H:mm:ss +0000" 
let nsdateString: String = formatter.stringFromDate(NSDate()) 

let account: [String: AnyObject] = [ 
    "first_name": firstName!, 
    "last_name": lastName!, 
    "email": email!, 
    "password": password!, 
// "timestamp": NSDate() // <-- causes an exception if uncommented 
    "timestamp": nsdateString // already converted to string 
] 

let gender: String? = "Male" 
let date: String? = "08 Jul 2001" 
let barberType: String? = "1" 

let parameters: [String: AnyObject] = [ "gender": gender!, "dob": date!, "loyalty_points": "0", "barber_type": barberType!, "account": 

let data = try NSJSONSerialization.dataWithJSONObject(parameters, options: .PrettyPrinted) 
let str = String(data: data, encoding: NSUTF8StringEncoding) 

print(str!) 

:

{ 
    "loyalty_points" : "0", 
    "account" : { 
    "first_name" : "Bob", 
    "last_name" : "Smith", 
    "email" : "[email protected]", 
    "password" : "1234", 
    "timestamp" : "2016-07-08 22:02:50 +0000" 
    }, 
    "gender" : "Male", 
    "barber_type" : "1", 
    "dob" : "08 Jul 2001" 
}