>

예상 한대로 AWS Lambda 함수가 작동하지만 JSON 응답을 구문 분석하는 데 문제가 있습니다. SwiftyJSON을 사용하고 있습니다.

내 테스트 코드는 다음과 같습니다 :

let json = JSON(task.result!)
print("SWyJSON: \(json)")
if let jsonDic = json.dictionary {
    print("SWyJSON2a: \(jsonDic)")
    print("SWyJSON2b: \(String(describing: jsonDic["body"]!))")
    if let x = json.dictionary?["body"]?.dictionary {
        print("SWyJSON2c: \(String(describing: x["Users"]))")
    }
}
SWyJSON: {
  "inBound" : "9bf69.....14d5ac4",
  "body" : "{\"Users\":[{\"Username\":\"test1\",\"Attributes\":[{\"Name\":\"email\",    \"Value\":\"[email protected]\"}],\"UserCreateDate\":\"2019-06-03T02:53:03.300Z\",  \"UserLastModifiedDate\":\"2019-06-03T02:53:56.580Z\",\"Enabled\":true,\"UserStatus\":\"CONFIRMED\"}]}",
  "statusCode" : 200
}
SWyJSON2a: ["inBound": 9bf69.....14d5ac4, "body": {"Users":[{"Username":"test1","Attributes":[  {"Name":"email","Value":"[email protected]"}],"UserCreateDate":"2019-06-03T02:53:03.300Z",    "UserLastModifiedDate":"2019-06-03T02:53:56.580Z","Enabled":true,"UserStatus":"CONFIRMED"}]}, "statusCode":     200]
SWyJSON2b: {"Users":[{"Username":"test1","Attributes":[{"Name":"email","Value":"[email protected]"}],   "UserCreateDate":"2019-06-03T02:53:03.300Z","UserLastModifiedDate":"2019-06-03T02:53:56.580Z", "Enabled":true,"UserStatus":"CONFIRMED"}]}

내 질문은 : 마지막 인쇄에서 결과가 나오지 않도록 코드에서 무엇이 잘못 되었습니까?

SWyJSON, SWyJSON2a 및 SWyJSON2b는 Xy 디버깅 콘솔에서 일부 결과를 보여 주지만 SWyJSON2c는 아닙니다. 다음과 같은 것을 기대할 수있는 곳 :

"Users":[{"Username":"test1","Attributes":[{"Name":"email","Value":"[email protected]"}],   "UserCreateDate":"2019-06-03T02:53:03.300Z","UserLastModifiedDate":"2019-06-03T02:53:56.580Z", "Enabled":true,"UserStatus":"CONFIRMED"}]

또는 :

[{"Username":"test1","Attributes":[{"Name":"email","Value":"[email protected]"}],   "UserCreateDate":"2019-06-03T02:53:03.300Z","UserLastModifiedDate":"2019-06-03T02:53:56.580Z", "Enabled":true,"UserStatus":"CONFIRMED"}]

  • 답변 # 1

    body  value는 사전이 아닌 문자열이므로 변경

    if let x = json.dictionary?["body"]?.dictionary {
    
    

    to

    if let x = json.dictionary?["body"]?.string {
        let data = Data(x.utf8)
        let content = try? JSONSerialization.jsonObject(with:data, options: [])
        if let _  =  content as? [[String:Any]] { // array 
           let res = try?  JSONDecoder().decode([Root].self,from:data)
           print(res)
        }
        else if let dic  =  content as? [String:Any] {  {
           guard let users = dic["Users"] else { return } // dictionay
           guard let jsonData = try? JSONSerialization.data(withJSONObject: users, options:[]) else { return }
           let res = try?  JSONDecoder().decode([Root].self,from:jsonData)
           print(res)
        }
    }
    
      // MARK: - Element
    struct Root: Codable {
        let username: String
        let attributes: [Attribute]
        let userCreateDate, userLastModifiedDate: String
        let enabled: Bool
        let userStatus: String
        enum CodingKeys: String, CodingKey {
            case username = "Username"
            case attributes = "Attributes"
            case userCreateDate = "UserCreateDate"
            case userLastModifiedDate = "UserLastModifiedDate"
            case enabled = "Enabled"
            case userStatus = "UserStatus"
        }
    }
    // MARK: - Attribute
    struct Attribute: Codable {
        let name, value: String
        enum CodingKeys: String, CodingKey {
            case name = "Name"
            case value = "Value"
        }
    }
    
    

관련 자료

  • 이전 asp.net - C #에서 제네릭 형식 확장에 대해 null을 반환
  • 다음 swift - SwiftUI에서 뷰의 수정 자에 어떻게 액세스 할 수 있습니까?