Swift 5 : 중첩 된 JSON 디코딩

샤니 스 C.

일부 JSON 데이터를 구조체로 디코딩하는 데 약간의 문제가 있습니다. 아래 방법을 시도했지만 작동하지 않습니다.

JSON :

{
    "submission_date": "2020-02-28T14:21:46.000+08:00",
    "status": "pending",
    "requestor": {
        "name": "Adam"
    },
    "claim_items": [
        {
            "date": "2020-02-20",
            "description": "TV",
            "currency": "MYR",
            "amount": "103.0",
            "amount_in_ringgit": "10.0"
        },
        {
            "date": "2020-02-20",
            "description": "Netflix",
            "currency": "MYR",
            "amount": "12.0",
            "amount_in_ringgit": "10.0"
        }
    ]
}

구조 방법 1 :

struct ClaimDetail: Decodable {
    let submission_date: String
    let status: String
    let requestor: Requestor
    let claim_items: [ClaimItem]
}

struct Requestor: Decodable {
    let name: String

    init(json: [String:Any]) {
        name = json["name"] as? String ?? ""
    }
}

struct ClaimItem: Decodable {
    let date: String
    let description: String
    let currency: String
    let amount: String
    let amount_in_ringgit: String

    init(json: [String:Any]) {
        date = json["date"] as? String ?? ""
        description = json["description"] as? String ?? ""
        currency = json["currency"] as? String ?? ""
        amount = json["amount"] as? String ?? ""
        amount_in_ringgit = json["amount_in_ringgit"] as? String ?? ""
    }
}

구조 방법 2 :

struct ClaimDetail: Decodable {
    let submission_date: String
    let status: String
    let requestor: Requestor
    let claim_items: [ClaimItem]

    struct Requestor: Decodable {
        let name: String

        init(json: [String:Any]) {
            name = json["name"] as? String ?? ""
        }
    }

    struct ClaimItem: Decodable {
        let date: String
        let description: String
        let currency: String
        let amount: String
        let amount_in_ringgit: String

        init(json: [String:Any]) {
            date = json["date"] as? String ?? ""
            description = json["description"] as? String ?? ""
            currency = json["currency"] as? String ?? ""
            amount = json["amount"] as? String ?? ""
            amount_in_ringgit = json["amount_in_ringgit"] as? String ?? ""
        }
    }
}

구조 방법 3 ( https://app.quicktype.io/ 를 통해 ) :

// MARK: - ClaimDetail
struct ClaimDetail: Codable {
    let submissionDate, status: String
    let requestor: Requestor
    let claimItems: [ClaimItem]

    enum CodingKeys: String, CodingKey {
        case submissionDate = "submission_date"
        case status, requestor
        case claimItems = "claim_items"
    }
}

// MARK: - ClaimItem
struct ClaimItem: Codable {
    let date, claimItemDescription, currency, amount: String
    let amountInRinggit: String

    enum CodingKeys: String, CodingKey {
        case date
        case claimItemDescription = "description"
        case currency, amount
        case amountInRinggit = "amount_in_ringgit"
    }
}

// MARK: - Requestor
struct Requestor: Codable {
    let name: String
}

URL 세션

URLSession.shared.dataTask(with: requestAPI) { [weak self] (data, response, error) in
    if let data = data {
        do {
            let json = try JSONDecoder().decode(ClaimDetail.self, from: data)
            print (json)
        } catch let error {
            print("Localized Error: \(error.localizedDescription)")
            print("Error: \(error)")
        }
    }
}.resume()

오류 아래의 모든 반환 :

현지화 된 오류 : 올바른 형식이 아니기 때문에 데이터를 읽을 수 없습니다.

오류 : dataCorrupted (Swift.DecodingError.Context (codingPath : [], debugDescription : "주어진 데이터가 유효한 JSON이 아닙니다.", 기본 오류 : 선택 사항 (오류 도메인 = NSCocoaErrorDomain Code = 3840 "문자 0 주변의 값이 잘못되었습니다.") UserInfo = { NSDebugDescription = 문자 0 주위의 유효하지 않은 값.})))

샤니 스 C.

해결책:

구조체 메서드 # 1을 사용했는데 문제가 아니 었습니다. 문제는 URLSession에서 데이터를 디코딩하는 방법이었습니다. 어떤 이유로 다음과 같이 작동합니다.

URLSession.shared.dataTask(with: requestAPI) { [weak self] (data, response, error) in
    
    if let data = data {
    
        do {
            let dataString = String(data: data, encoding: .utf8)
            let jsondata = dataString?.data(using: .utf8)
            let result = try JSONDecoder().decode(ClaimDetail.self, from: jsondata!)
            print(result)
        
        } catch let error {
            print("Localized Error: \(error.localizedDescription)")
            print("Error: \(error)")
        }
    }
}.resume()

스크린 샷 :

여기에 이미지 설명 입력

나는 정말로 이해하지 못하지만 데이터를 문자열로 변환 한 다음 대신 디코딩해야한다고 생각합니까?

도와 주셔서 감사합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

JSON에서 중첩 된 객체 디코딩

분류에서Dev

Realm + Swift, 중첩 된 JSON

분류에서Dev

중첩 된 JSON 디코딩 배열의 데이터를 Laravel DB에 저장

분류에서Dev

where 절에 중첩 된 디코딩

분류에서Dev

Swift / JSONEncoder : 중첩 된 원시 JSON 객체 리터럴을 포함하는 인코딩 클래스

분류에서Dev

중첩 된 열거 형 Swift 3 인코딩

분류에서Dev

Swift 4 Json 인코딩 및 디코딩

분류에서Dev

Swift-플랫 json을 중첩 구조로 디코딩하는 방법은 무엇입니까?

분류에서Dev

PHP에서 중첩 된 json 객체 인코딩

분류에서Dev

깊은 중첩 객체로 인코딩 된 HTML 필드 json

분류에서Dev

깊은 중첩 객체로 인코딩 된 HTML 필드 json

분류에서Dev

JSON은 circe를 사용하여 Scala에서 중첩 된 필드를 Map [String, String]으로 디코딩합니다.

분류에서Dev

가장 낮은 수준의 키가 동일한 경우 중첩 된 JSON 디코딩

분류에서Dev

Scala에서 Circe를 사용하여 중첩 된 json을 List [Object]로 디코딩하는 방법

분류에서Dev

일반 배열로 디코딩 된 JSON에서 중첩되지 않은 항목에 액세스

분류에서Dev

XLS => 중첩 된 JSON

분류에서Dev

Swift 5에서 json을 디코딩 할 때 오류가 있습니다.

분류에서Dev

Laravel 5 : Ajax 호출에서 반환 된 JSON을 디코딩하는 방법

분류에서Dev

Swift 및 API : JSON 트리 디코딩

분류에서Dev

PHP에서 잘못된 JSON 디코딩

분류에서Dev

SwiftUI를 사용하여 중첩 된 JSON 요소를 디코딩하고 뷰에 정보를 표시하는 방법은 무엇입니까?

분류에서Dev

Swift 4에서 어떻게 Codable을 사용하여 JSON을 디코딩하고 디코딩 된 객체간에 참조를 생성 할 수 있습니까?

분류에서Dev

Swift 5에서 인코딩 된 json 데이터 개체를 로컬 파일에 쓸 수 없습니다.

분류에서Dev

Json의 중첩 된 개체

분류에서Dev

Mongodb Java의 중첩 된 Json

분류에서Dev

중첩 된 요소 목록을 디코딩 할 때 ei_decode_list 사용

분류에서Dev

중첩 된 JSON 문서의 D3 바인딩 데이터

분류에서Dev

MVC 및 Json을 사용하여 중첩 된 개체 바인딩

분류에서Dev

중첩 된 UI 아코디언?

Related 관련 기사

  1. 1

    JSON에서 중첩 된 객체 디코딩

  2. 2

    Realm + Swift, 중첩 된 JSON

  3. 3

    중첩 된 JSON 디코딩 배열의 데이터를 Laravel DB에 저장

  4. 4

    where 절에 중첩 된 디코딩

  5. 5

    Swift / JSONEncoder : 중첩 된 원시 JSON 객체 리터럴을 포함하는 인코딩 클래스

  6. 6

    중첩 된 열거 형 Swift 3 인코딩

  7. 7

    Swift 4 Json 인코딩 및 디코딩

  8. 8

    Swift-플랫 json을 중첩 구조로 디코딩하는 방법은 무엇입니까?

  9. 9

    PHP에서 중첩 된 json 객체 인코딩

  10. 10

    깊은 중첩 객체로 인코딩 된 HTML 필드 json

  11. 11

    깊은 중첩 객체로 인코딩 된 HTML 필드 json

  12. 12

    JSON은 circe를 사용하여 Scala에서 중첩 된 필드를 Map [String, String]으로 디코딩합니다.

  13. 13

    가장 낮은 수준의 키가 동일한 경우 중첩 된 JSON 디코딩

  14. 14

    Scala에서 Circe를 사용하여 중첩 된 json을 List [Object]로 디코딩하는 방법

  15. 15

    일반 배열로 디코딩 된 JSON에서 중첩되지 않은 항목에 액세스

  16. 16

    XLS => 중첩 된 JSON

  17. 17

    Swift 5에서 json을 디코딩 할 때 오류가 있습니다.

  18. 18

    Laravel 5 : Ajax 호출에서 반환 된 JSON을 디코딩하는 방법

  19. 19

    Swift 및 API : JSON 트리 디코딩

  20. 20

    PHP에서 잘못된 JSON 디코딩

  21. 21

    SwiftUI를 사용하여 중첩 된 JSON 요소를 디코딩하고 뷰에 정보를 표시하는 방법은 무엇입니까?

  22. 22

    Swift 4에서 어떻게 Codable을 사용하여 JSON을 디코딩하고 디코딩 된 객체간에 참조를 생성 할 수 있습니까?

  23. 23

    Swift 5에서 인코딩 된 json 데이터 개체를 로컬 파일에 쓸 수 없습니다.

  24. 24

    Json의 중첩 된 개체

  25. 25

    Mongodb Java의 중첩 된 Json

  26. 26

    중첩 된 요소 목록을 디코딩 할 때 ei_decode_list 사용

  27. 27

    중첩 된 JSON 문서의 D3 바인딩 데이터

  28. 28

    MVC 및 Json을 사용하여 중첩 된 개체 바인딩

  29. 29

    중첩 된 UI 아코디언?

뜨겁다태그

보관