2017-12-08 16 views
-3

Swift 4에서 JSON을 구문 분석 할 구조체를 만드는 데 문제가 있습니다. 작은 JSON을 구문 분석 할 수 있으며 JSONDecoder가 정상적으로 작동하는 것 같습니다. 그냥 그렇게 JSON을 구문 분석 구조체를 만드는 데 도움이 필요 :SWIFT 4 중첩 JSON 구조체 - 코드 가능

{ 
    "main": { 
     "solutions": [ 
        { 
        "exersises": [ 
            { 
            "book_title": "test", 
            "release_date": "2015-01-12T11:00", 
            "price": 100, 
            "additional": [ 
                { 
                "item1": "test", 
                "item2": "test", 
                "number": 1 
                }, 
                { 
                "item1": "test2", 
                "item2": "test2", 
                "number": 2 
                } 
                ], 
            "availability": "Yes", 
            "item_id": 43534 
            } 
            ] 


        } 

        ] 
    } 
} 

구조체의 어떤 종류 예를 들어 BOOK_TITLE의 가치에 도착해야합니까?

+0

'class'에 대해'struct'를 사용해야하는지 잘 모르겠습니다 만, 필요한 것은 중첩 된 타입입니다. '운동 ','해결책'등 – Sulthan

답변

0

정말 쉽습니다. 주된 probem은 루트 요소 일 가능성이 큽니다. 내가 너에게 1 ~ 2 층을 갖도록 하렴.

let decoded = try JSONDecoder().decode(MainJSON.self, from: data) 

class MainJSON { 
    var main:SolutionJSON? 
} 

class SolutionJSON { 
    var exercises:[ExercisesJSON]? 
} 

class ExercisesJSON: Codable { 
    var bookTitle: String? 
    var releaseDate: String? 
    var price: Double? 
    ... etc 

    enum CodingKeys: String, CodingKey { 
     case bookTitle = "book_title" 
     case releaseDate = "release_date" 
     case price = "price" 
    } 
} 

ExerciseJSON도 일치하지 않는 경우 신속 속성으로 다시 매핑 JSON 등록을 할 수 있습니다 Codable 인터페이스를 사용합니다. 희망이 도움이됩니다.

+0

고마워요. 정확히 내가 찾던 것이 었습니다. 루트 요소에 대한 논리를 파악할 수 없었습니다. 요소를 표시 할 수 있으려면 실제로 레벨을 하나 더 추가해야했습니다. book_title에 액세스하는 방법을 알고 있습니까? 나는 해독 된 ..main.solutions.exersises [0] .book_title을 시도하고있다. 그리고 오류가 발생했습니다 –

+0

내가 알아 냈어 : print (decoded.main! .solutions! [0] .exersises! [0] .bookTitle!) –

+1

@MikeT 클래스 대신 구조체를 사용하고 모든 속성을 선언하지 않습니다. 선택적 및 상수 –

-1

은 내가
에게,이 조건

그냥 다운로드 XCODE 및하여 맥에서 GitHub의에서 실행을이 MACOS APP을 실행하지만 당신의 JSON 매우 간단을 위해뿐만 아니라 그것을 일반적인 솔루션을 제공하는 것을 선호 복잡한 JSON에 대한 모델을 만들 것입니다

노트

1 JSON 키는 처음에 자본 문자가있는 경우 모델을 복사 한 후

이 두 경우 JSON 객체가 동일한 구조와 같은 키 이름을 가지고있는 JSON처럼 변경해야합니다 그래서, 작은 것 단 하나의 모델이 될 것입니다.

+0

난 애플 리케이션을 사용하려고했지만 결과는 정말 이상한, 내 질문에 위에서 언급 한 특정 JSON에 대한 3 개의 다른 파일을 ... 이전 답변에서 언급 한대로 빠른 struct 형식으로 얻을 수 있습니까? –

+0

당신은 하나의 파일에서 그것들을 처리 할 수 ​​있지만 이거나 코드를 깨끗하게하려면 클래스 나 구조체를 사용할 수 있습니다 –

+0

예 신속한 구조체, Java 클래스 또는 객관적인 C로 가져올 수 있습니다. 문제의 오른쪽 하단 모서리를 보면 이미지입니다. –