2016-06-27 5 views
1

my Jsonデータサンプル。これはデータのサンプルにすぎません。同様に、サブカテゴリの数が22のように利用可能なデータが多くあります。項目の数はサブカテゴリによって異なります。また、行の数は15で、最初の名前はピザです。 enter image description hereenter image description hereアラモファイアと一緒にswiftJsonを使用してjsonデータを解析する方法

[ 
{ 
    "id": "244", 
    "name": "PIZZAS", 
    "image": "", 
    "coupon": "1", 
    "icon": "", 
    "order": "1", 
    "aname": "", 
    "options": "2", 
    "subcategory": [ 
       { 
       "id": "515", 
       "name": "MARGARITA", 
       "description": "Cheese and Tomato", 
       "image": "", 
       "icon": "", 
       "coupon": "1", 
       "order": "1", 
       "aname": "", 
       "options": "2", 
       "item": [ 
          { 
           "id": "1749", 
           "name": "9 Inch Thin & Crispy Margarita", 
           "description": "", 
           "price": "3.40", 
           "coupon": "1", 
           "image": "", 
           "options": "2", 
           "order": "1", 
           "addon": "495", 
           "aname": "", 
           "icon": "" 
         }] 
      }] 
    }] 

は、私は私が特に異なるテーブルビューに取り込むことができるように、すべての名前、すべてのサブカテゴリ名、すべての項目名と特定の配列にすべてのアイテムの説明を取得したい

func ParseJSON(){ 
    var MenuList = [Menu]() 

    Alamofire.request(.GET, myUrl) 
     .validate() 
     .responseJSON { response in 
      switch response.result 
      { 
      case .Success: 
       if let value = response.result.value { 
        let json = JSON(value) 
        print("JSON: \(json)") 
         for entity in json{ 
         print(entity) 
         MenuList.append(entity["name"]) ///error 
        } 

       } 
      case .Failure(let error): 
       print(error) 
      } 
    } 

} 

私はAlamofireを使用して応答を取得できます。 SwiftJsonを使って実装する方法は?

を更新しました

私は、メインカテゴリ、サブカテゴリ、アイテムのクラスモデルを追加しました。クラスにデータを渡すと、あなたのjsonが既にSwiftyJSONオブジェクトである値

答えて

0

を取得する方法を

import UIKit 
    class Menu { 
       var id: Int? 
       var name: String? 
       var image: UIImage? 
       var coupon: Int? 
       var icon: UIImage? 
       var order: Int? 
       var aname: Int? 
       var options: Int? 

init(id:Int,name:String,image:UIImage,coupon:Int,icon:UIImage,order:Int,aname:Int,options:Int){ 
     self.id = id 
     self.name = name 
     self.image = image 
     self.coupon = coupon 
     self.icon = icon 
     self.order = order 
     self.aname = aname 
     self.options = options 


    } 
    } 

これらのオブジェクトには、常にインデックスキーとコンテンツキーがあります。

したがって、jsonをループするには、for entity in jsonの代わりにfor (_, entity) in jsonが必要です。

_の部分は無視するインデックスです。インデックスを使用したい場合は、for (index, entity) in jsonを実行することもできます。

また、.string(オプション)または.stringValue(オプションではない)などのSwiftyJSONのタイププロパティを使用する必要があります。

モデルクラスでは、プロパティタイプは取得したものを反映する必要があります。

あなたのJSONの最初のレベルからMenuオブジェクトの配列を移入するには、次のようにモデルを適応させることができます:

class Menu { 
    var id: Int? 
    var name: String? 
    var image: String? 
    var coupon: Int? 
    var icon: String? 
    var order: Int? 
    var aname: String? 
    var options: Int? 

    init(id: Int?, name: String?, image: String?, coupon: Int?, icon: String?, order: Int?, aname: String?, options: Int?) { 
     self.id = id 
     self.name = name 
     self.image = image 
     self.coupon = coupon 
     self.icon = icon 
     self.order = order 
     self.aname = aname 
     self.options = options 
    } 
} 

そして、JSONから配列移入:今

var menus = [Menu]() 

for (_, content) in json { 
    let menu = Menu(id: Int(content["id"].stringValue), 
        name: content["name"].string, 
        image: content["image"].string, 
        coupon: content["coupon"].int, 
        icon: content["icon"].string, 
        order: Int(content["order"].stringValue), 
        aname: content["name"].string, 
        options: Int(content["options"].stringValue)) 
    menus.append(menu) 
} 

を必要に応じてオブジェクトを反復処理できます。

for menu in menus { 
    print(menu.name) 
    print(menu.id) 
} 

プリント:

オプションあなたはまた、各オブジェクトの「サブカテゴリ」のデータを使用する場合(「ピザ」)
オプション(244)

今、あなたは他のモデルクラスを作成する必要がありますそれらは "SubCategory"クラスと "Item"クラスのようなプロパティを反映しています(例えば、各メニューにも格納できます)。私の例と同じシステムを使用して、それらを実装します。それぞれのフォーマットに適応するだけで済みますが、実際にこの例を使用すると、そこに到達するのはかなり簡単になるはずです。そのトリックは、モデルオブジェクトに反映できるようにJSON構造を十分に理解することです。主にこれに焦点を当て、残りは続くでしょう。 :)

+0

イメージのセクションでは、配列にデータを入力しているときに.stringの代わりに.imageを使用する必要があります。これは、文字列の値をUIimageに変換できないようなエラーがあるためです。 –

+0

JSONでイメージを作成することはできません。 JSONの例では、 '' image ":" "'と表示されます。コンテンツは文字列です。このString(あなたの例では空です)はおそらく、JSONを解析した後に画像を取得するために使用できるURLです。 – Moritz

+0

今私はそれを得た。私はモーダルクラスのUIImageとしてそれを取った –

関連する問題