2017-12-08 15 views
-3

Swift 4でJSONを解析するための構造体を作成する際に問題が発生しました。小さなJSONを解析でき、JSONDecoderが正常に動作しているようです。ちょうどそのようにJSONを解析する構造体を作成するための助けが必要:私は、例えばBOOK_TITLEの値を取得する必要があります構造体の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 
            } 
            ] 


        } 

        ] 
    } 
} 

どのような?

+0

私はあなたが 'class'に対して' struct'を使うべきかどうか本当に確信していませんが、必要なのは入れ子型です。 'Exercise'、' Solution'など – Sulthan

答えて

0

これは本当に簡単です。あなたの主な探検は、おそらくルート要素です。私はあなたのために最初の層または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プロパティが一致しない場合、jsonプロパティを迅速なプロパティに再マッピングできるようにするCodableインターフェイスも使用します。お役に立てれば。

+0

ありがとう、それは私が探していたものです。ルート要素のロジックを理解できませんでした。実際に要素を表示できるように、もう1つのレベルを追加する必要がありました。あなたはbook_titleにアクセスする方法を知っていますか?私はdecoded.main.solutions.exersises [0] .book_titleを試しています。エラーが発生しました –

+0

私はそれを理解しました:print(decoded.main!.solutions![0] .exersises![0] .bookTitle!) –

+1

@MikeTクラスの代わりに構造体を使用し、すべてのプロパティを宣言しません。オプションおよび定数 –

-1

私は、この条件のためだけでなく、

を一般的なソリューションを提供することを好む、それだけでダウンロードして実行このMACOS APPをGitHubの 実行から、それをお使いのMacにXCODEによってそしてそれであなたのJSON非常に簡単で、
それがどんな複雑なJSONのためのモデルを作ります

ノート

1 JSONのキーは最初の資本文字を持っている場合、それは 小さくなりますので、モデルをコピーした後、次の2つのJSONオブジェクトが同じ構造と同じキー名を持っている場合はJSON

よう

2を、それを変更する必要がありますただ1つのモデルになります

+0

私はアプリを使用しようとしましたが、結果は本当に奇妙です、私の質問で上記の特定のJSONのために私は3つの異なるファイルを取得...それは前の答えで述べたように迅速な構造体の形式で取得することは可能ですか? –

+0

あなたはあなたがコードをきれいにしたいならば、 の1つのファイルにそれらを入れることはできますが、そうでなくてもクラスや構造体を使うことができます –

+0

はい、スワップ構造体、Javaクラス、問題の画像の右下を見ると –

関連する問題