Cómo crear la clase de modelo para los siguientes datos en JSON y analizarlo?

Mis datos JSON

{
 "addon_items" : [
                     {
                      "aname" : "",
                      "id" : "2588",
                      "name" : "Plain Nan",
                      "order" : "1",
                      "aid" : "259",
                      "Sub_Add_Items" : "",
                      "icon" : "",
                      "status" : "1",
                      "next" : "0",
                      "price" : "0.60"
                     },
                     {
                      "aname" : "",
                      "id" : "2589",
                      "name" : "Pitta Bread",
                      "order" : "2",
                      "aid" : "259",
                      "Sub_Add_Items" : "",
                      "icon" : "",
                      "status" : "1",
                      "next" : "0",
                      "price" : "0.00"
                    }

                   ],

 "addon" : {
             "description" : "Please choose your Nan bread",
             "aname" : "",
             "id" : "259",
             "icon" : "",
             "limit" : "1",
             "special_addon" : "",
             "next" : "165"
           }
 }

He creado tres modelos de clase llamado AddOnResponse, AddOn, AddOnItems como este:

AddOnResponse modelo de clase

class AddOnResponse {

var addon: Array<String>?
var addonitems: Array<AnyObject>?

init(addon:Array<String>?,addonitems: Array<AnyObject>?){
    self.addon = addon
    self.addonitems = addonitems
 }
}

AddOn modelo de clase

class AddOn {


var id: Int?
var icon: String?
var desc: String?
var limit: Int?
var next: Int?
var aname: String?
var specialaddon: Int?

init(id: Int?,icon: String?,desc: String?,limit: Int?,next: Int?,aname: String?,specialaddon: Int?){

    self.id = id
    self.icon = icon
    self.desc = desc
    self.limit = limit
    self.next = next
    self.aname = aname
    self.specialaddon = specialaddon

  }
 }

AddOnItems modelo de clase

class AddOnItems {


var id: Int?
var aid: Int?
var name: String?
var price: Int?
var order: Int?
var status: Int?
var next: Int?
var aname: String?
var subaddItems: Int?
var icon: String?

init(id: Int?,aid: Int?,name: String?,price: Int?,order: Int?,status: Int?,next: Int?,aname: String?,subaddItems: Int?,icon: String?){
    self.id = id
    self.aid = aid
    self.name = name
    self.price = price
    self.order = order
    self.status = status
    self.next = next
    self.aname = aname
    self.subaddItems = subaddItems
    self.icon = icon
   }
 }

Ahora estoy recuperando mis datos JSON utilizando Alamofire pero a la hora de aceptar dat en la clase del modelo con el objeto de que estoy recibiendo valor nil.

    var addonResponses = [AddOnResponse]()

    Alamofire.request(.GET, myAddOnUrl)
        .validate()
        .responseJSON
        {   response in
            switch response.result
            {
            case .Success:
                if let value = response.result.value{
                    let json = JSON(value)
                    print(json)
                    print(json["addon"].arrayValue)


           for(_,content) in json{
               let addOnRes = AddOnResponse(addon:content["addon"].arrayValue,
                               addonitems:content["addon_items"].Arrayobject)

                        print(self.addonResponses.count)
                        print(addOnRes.addon)
                        print(addOnRes.addonitems)
                    }
                }

El addon y addonitems datos están llegando nil, ¿por qué?

El uso de Brillo en lugar de Swifty-json , si va a ser útil.
causa addon_items es una matriz y addon es un diccionario
ok, entonces dime la solución, hwz el modelo de clase debe ser para ‘complemento’ y ‘addon_items’ y cómo para pasar en el [email protected]ÖzgürErsil
Gracias, pero la mayoría de la parte he manejado mediante swiftyJson. así que no quiero utilizar otro tercero..así que si cualquier solución con respecto a esto que me ayude.. @Md.MuzahidulIslam
Sí acordado @iMuzahid, brillo hará la tarea mucho más fácil, aunque puede utilizar codable demasiado, probar los diferentes modelos que pueden generar aquí jsoncafe.com

OriginalEl autor PRADIP KUMAR | 2016-07-27

6 Kommentare

  1. 7

    Después de ir a través de su respuesta en JSON, lo que veo es que usted está recibiendo un objeto que tiene dos nodos(o propiedades).
    Primera «addon_items» que tiene como matriz y para el que ha creado una clase AddOnItems que es correcto.
    Segundo- «addon»: esta clave aquí es la referencia a un ‘Diccionario’ en vez de un array.

    Para almacenar la respuesta en su AddOnResponse objeto de tratar el siguiente código.

    Alamofire.request(.GET, myAddOnUrl).validate().reponseJSON { response in
        switch resonse.result {
        case .Success:
           if let value = response.result.value {
               let json = JSON(value)
               let responseDictionary = json.dictionaryValue as? [String: AnyObject]
               let addOnRes = AddOnResponse(addon:responseDictionary["addon"].dictionaryValue, addonitems:responseDictionary["addon_items"].arrayValue)
           }
        case .Failure:
           break
        } 
    }

    También hacer un cambio a su AddOnResponse clase

    class AddOnResponse {
        var addon: [String: AnyObject]?
        var addonitems: Array<AnyObject>?
    
        init(addon:[String: AnyObject]?,addonitems: Array<AnyObject>?){
            self.addon = addon
            self.addonitems = addonitems
        }
    }

    TL;DR
    Su respuesta JSON no correctamente se corresponden con el modelo que usted ha hecho en su aplicación. Revise el «addon» la clave de su respuesta json que tiene un diccionario de objeto y NO de UNA MATRIZ, y en consecuencia hacer que su modelo de clases.

    Edición: Rectificar el error de señalar el error de conversión.
    Lo que ahora tendría que sugieren es que pase el objeto JSON para `add_on la tecla. En el Complemento cambio de clase, la initialiser para que tarda un objeto JSON. Luego de iniciar con ellos usando.
    AddOn Clase Initialiser

    init(json: JSON) {
        id = json["id"].intValue
        name = json["name"].stringValue
        //and so on
    }

    Igualmente hacer lo mismo para AddOnItems. Y en el AddOnResponse initialiser recorrer en un bucle el objeto JSON para AddOnItems. Inicializar y anexar a la addOnItems propiedad de matriz.
    Lo siento, no se puede escribir el código para ella ahora. Tengo una restricción de tiempo.

    cuando he utilizado este código me sale error en esta línea……vamos a responseDictionary = json.dictionaryValue como? [String: AnyObject]
    error » No se puede convertir el valor de tipo ‘[String : JSON]’ de tipo ‘[String : AnyObject]’ en la coerción»
    No lanzarla como [String: AnyObject]. Que error fue porque allí hay más datos anidados. Los echarán en el momento de pasar a la initialiser. La razón por la que cada nodo en un objeto JSON (SwiftJSON) es de tipo JSON hasta y a menos que se convierten en el último descendiente.
    todavía problema. podría usted podrá editar su respuesta en consecuencia
    Tengo el AddOnResponse con pocas modificaciones, como he publicado en mi respuesta. Gracias

    OriginalEl autor nishantdesai

  2. 2
    import Foundation
    import SwiftyJSON
    
    class UserInfo {
    
        var mobile : Int?
        var userid : Int?
        var email : String?
        var name : String?
    
        init() {
    
        }
    
        init(json : JSON){
            mobile = json["phone_number"].intValue
            userid = json["id"].intValue
            email = json["email"].stringValue
            name = json["name"].stringValue
        }
    
    }

    OriginalEl autor Ved Rauniyar

  3. 1

    Después de tantos experimentos que tengo la respuesta. Tengo que pasar los datos a los objetos, como de esta manera. seguí a @nishantdesai respuestas y hacer algunas modificaciones..

     Alamofire.request(.GET, myAddOnUrl)
            .validate()
            .responseJSON
            {   response in
                switch response.result
                {
                case .Success:
                    if let value = response.result.value{
                        let json = JSON(value)
    
                        let addOnRes = AddOnResponse(addon: json["addon"].object as? [String : AnyObject],
                                                    addonitems: json["addon_items"].arrayObject)
                        print(addOnRes.addon)
                        print(addOnRes.addonitems)
    
    
    
                    }

    OriginalEl autor PRADIP KUMAR

  4. 1

    Probar esta. Esto lo he hecho usando AlamofireObjectMapper. Compruebe AlamofireObjectMapper para obtener más información

    import UIKit
    import ObjectMapper
    
    
    class FollowList: Mappable {
    
        var addonItems : [addonItemsList]?
        required init?(_ map: Map) {
            super.init(map)
        }
        override func mapping(map: Map) {
            super.mapping(map)
    
            addonItems <- map["addon_items"]
        }
        }
         class addonItemsList : Mappable{
        var aname : String?
        var id : String?
        var name : String?
        var order : Int?
        var aname : Int?
    
        required init?(_ map: Map) {
    
        }
        func mapping(map: Map) {
    
            aname <- map["aname"]
            id <- map["id"]
            order <- map["order"]
            name <- map["name"]
            icon <- map["icon"]
    
        }
    
    }
    
           let URL = "https://raw.githubusercontent.com/tristanhimmelman/AlamofireObjectMapper/2ee8f34d21e8febfdefb2b3a403f18a43818d70a/sample_keypath_json"
    
    
              Alamofire.request(.GET, URL)..responseArray { (response: Response<[FollowList], NSError>) in { (response: Response< FollowList, NSError>) in
        expectation.fulfill()
    
        let FollowList = response.result.value
        print(FollowList?. addonItems)
    
    }

    OriginalEl autor Prashant Ghimire

  5. 0

    Su muy simple para crear el modelo de la clase, por favor, siga el procedimiento de abajo.

    Crear swift de la clase con el nombre de «Muestra», escribir el código como el siguiente.

    Class Sample{
        var id:String?
        var aname:String?
        var name:String?
        var order:String?
        var aid:String?
        var Sub_Add_Items:String?
        var icon:String?
        var status:String?
        var next:String?
        var price:String?
        func update(info: JSON) {
            id = data["id"].string
            aname = data["aname"].string
            name = data["name"].string
            order = data["order"].string
            aid = data["aid"].string
            Sub_Add_Items = data["Sub_Add_Items"].string
            icon = data["icon"].string
            status = data["status"].string
            next = data["next"].string
            price = data["price"].string
        }
    }

    y también crear uno mucho más rápido de la clase como «Detalles» código como el siguiente,

    Class Details{
        var list: [Sample] = [Sample]()
        func addDetails(data: JSON){
            for(_, detailObj) in data {
                let sampleObj = Sample()
                sampleObj.update(detailObj)
                list.append(sampleObj)
            }
        }
    }

    y en su viewcontroller antes de viewdidload() método de crear un objeto de Detalles de la clase como

    var detailsObj = Details()

    Después de que recibió la respuesta de alamofire método de solicitud, llame al método como a continuación:

    self.detailsObj.addDetails(data!["addon_items"] as JSON)

    De datos no es sino la respuesta que se obtiene de alamofire.

    Más tarde, usted puede acceder a las variables de la siguiente manera:

    detailsObj.list[0].name

    y puede mostrarlo.

    Si es posible, cómo escribir una clase del modelo u me puede ayudar bro @Arshad Shaik
    simplemente siga el procedimiento anterior , yo había mencionado de manera muy clara. Si usted tiene alguna duda me puede ayudar.
    Estoy teniendo un Json como este json-generator.com/api/json/get/cwqUAMjKGa?indent=2 debo necesidad de utilizar dos clases del modelo, una para niños y otra para los productos de @Arshad Shaik
    y tengo que mostrar como se muestra en la imagen como ésta, i.stack.imgur.com/d3U1p.png
    si es posible me ayuden soy un aprendiz, así que no sé cómo hacer @Arshad Shaik

    OriginalEl autor Arshad Shaik

  6. 0

    Puede utilizar ObjectMapper

    class AddOn: Mappable {
       var description: String!
       var aname: String?
       var id: String!
       var icon: String?
       var limit: String?
       var special_addon: String?
       var next: String?
    
       required init?(map: Map) {
    
       }
    
       //Mappable
       func mapping(map: Map) {
          description <- map["description"]
          aname <- map["aname"]
          id <- map["id"]
          icon <- map["icon"]
          limit <- map["limit"]
          special_addon <- map["special_addon"]
          next <- map["next"]
       }
    }
    
    class AddOnItems: Mappable {
       var aname: String?
       var id:String!
       var name: String!
       var order: String?
       var Sub_Add_Items: String?
       var status: String!
       var next: String!
       var price: String!
    
       required init?(map: Map) {
    
       }
       //Mappable
       func mapping(map: Map) {
          aname <- map["aname"]
          id <- map["id"]
          name <- map["name"]
          order <- map["order"]
          Sub_Add_Items <- map["Sub_Add_Items"]
          status <- map["status"]
          next <- map["next"]
          price <- map["price"]
       }
    }
    
    class requirement: Mappable {
    
       var addOnItems: [AddOnItems]?
       var addOn: AddOn!
    
       required init?(map: Map) {
    
       }
       //Mappable
       func mapping(map: Map) {
         addOnItems <- map["addon_items"]
         addOn <- map["addon_items"]
       }
    
    }

    OriginalEl autor ajaykoppisetty

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea